قواعد التصفية العددية

نظرة عامة

يقوم التعبير المسند بإخراج قيمة منطقية. يقوم ميلفوس بإجراء تصفية عددية من خلال البحث باستخدام المسندات. يقوم التعبير المسند، عند تقييمه، بإرجاع إما TRUE أو FALSE. اعرض مرجع Python SDK API للحصول على تعليمات حول استخدام التعبيرات المسندة.

تصف قواعد نحوEBNF قواعد التعبيرات المنطقية:

Expr = LogicalExpr | NIL
LogicalExpr = LogicalExpr BinaryLogicalOp LogicalExpr 
              | UnaryLogicalOp LogicalExpr
              | "(" LogicalExpr ")"
              | SingleExpr;
BinaryLogicalOp = "&&" | "and" | "||" | "or";
UnaryLogicalOp = "not";
SingleExpr = TermExpr | CompareExpr;
TermExpr = IDENTIFIER "in" ConstantArray;
Constant = INTEGER | FLOAT
ConstantExpr = Constant
               | ConstantExpr BinaryArithOp ConstantExpr
               | UnaryArithOp ConstantExpr;
                                                          
ConstantArray = "[" ConstantExpr { "," ConstantExpr } "]";
UnaryArithOp = "+" | "-"
BinaryArithOp = "+" | "-" | "*" | "/" | "%" | "**";
CompareExpr = IDENTIFIER CmpOp IDENTIFIER
              | IDENTIFIER CmpOp ConstantExpr
              | ConstantExpr CmpOp IDENTIFIER
              | ConstantExpr CmpOpRestricted IDENTIFIER CmpOpRestricted ConstantExpr;
CmpOpRestricted = "<" | "<=";
CmpOp = ">" | ">=" | "<" | "<=" | "=="| "!=";
MatchOp = "like" | "LIKE";
JsonArrayOps = JsonDefs "(" IDENTIFIER "," JsonExpr | JsonArray ")";
JsonArrayDefs = "json_contains" | "JSON_CONTAINS" 
           | "json_contains_all" | "JSON_CONTAINS_ALL" 
           | "json_contains_any" | "JSON_CONTAINS_ANY";
JsonExpr =  Constant | ConstantArray | STRING | BOOLEAN;
JsonArray = "[" JsonExpr { "," JsonExpr } "]";
ArrayOps = ArrayDefs "(" IDENTIFIER "," ArrayExpr | Array ")";
ArrayDefs = "array_contains" | "ARRAY_CONTAINS" 
           | "array_contains_all" | "ARRAY_CONTAINS_ALL" 
           | "array_contains_any" | "ARRAY_CONTAINS_ANY"
           | "array_length"       | "ARRAY_LENGTH";
ArrayExpr =  Constant | ConstantArray | STRING | BOOLEAN;
Array = "[" ArrayExpr { "," ArrayExpr } "]";

يسرد الجدول التالي وصف كل رمز مذكور في قواعد التعبيرات المنطقية أعلاه.

الرمزالوصف
=التعريف
,التسلسل
;الإنهاء
|التناوب.
{...}التكرار.
(...)تجميع.
لا شيءفارغ. يمكن أن يكون التعبير سلسلة فارغة.
INTEGERالأعداد الصحيحة مثل 1، 2، 3.
عائمأرقام عائمة مثل 1.0، 2.0.
كونستأعداد صحيحة أو أرقام عائمة.
معرّفمعرّف. في ميلفوس، يمثل المعرف اسم الحقل.
LogicalOpLogicalOp هو مشغل منطقي يدعم دمج أكثر من عملية علائقية في مقارنة واحدة. القيمة العائدة من LogicalOp هي إما TRUE (1) أو FALSE (0). هناك نوعان من LogicalOps، بما في ذلك BinaryLogicalOps و UnaryLogicalOps.
الأحادي المنطقييشير UnaryLogicalOp إلى المشغّل المنطقي الأحادي "ليس".
BinaryLogicalOpالعوامل المنطقية الثنائية التي تنفذ إجراءات على معاملين. في التعبير المعقد الذي يحتوي على معاملين أو أكثر، يعتمد ترتيب التقييم على قواعد الأسبقية.
حسابيOpيقوم ArithmeticOp، أي عامل حسابي، بتنفيذ عمليات رياضية مثل الجمع والطرح على المعاملات.
UnaryArithOpUnaryArithOp هو مشغّل حسابي يقوم بإجراء عملية على معامل واحد. يغيّر UnaryArithOp السالب تعبيرًا موجبًا إلى سالب، أو العكس.
ثنائيArithOpيُجري BinaryArithOp، أي مشغّل ثنائي، عمليات على معاملين. في التعبير المركب الذي يحتوي على معاملين أو أكثر، يعتمد ترتيب التقييم على قواعد الأسبقية.
CmpOpCmpOp هو مشغّل علائقي ينفذ عمليات على معاملين اثنين.
CmpOpRestrictedيقتصر CmpOpRestricted على "أقل من" و "مساوٍ".
ثابتExprيمكن أن يكون ConstantExpr ثابتًا أو ثنائيًا على اثنين من ConstExprs أو أحاديًا على ثابت واحد. يتم تعريفه بشكل متكرر.
مصفوفة ثابتةيتم تغليف ConstantArray بأقواس مربعة، ويمكن تكرار ConstantExpr في الأقواس المربعة. يجب أن تتضمن ConstantArray على الأقل ConstantExpr واحدًا على الأقل.
مصطلحExprيُستخدم TermExpr للتحقق مما إذا كانت قيمة المعرّف تظهر في ConstantArray أم لا. يتم تمثيل TermExpr بحرف "في".
قارنإكسبريمكن أن يكون تعبير المقارنة، أي تعبير المقارنة عمليات علائقية على معرّفين، أو عمليات علائقية على معرّف واحد ومعرّف واحد ConstantExpr، أو عمليات ثلاثية على معرّفين ثابتين ومعرّف واحد.
مفردExprيمكن أن يكون SingleExpr، أي التعبير المفرد، إما مصطلحExpr أو مقارنةExpr.
LogicalExprيمكن أن يكون LogicalExpr تعبيرًا ثنائيًا منطقيًا ثنائيًا على تعبيرين منطقيين، أو تعبيرًا أحاديًا منطقيًا أحاديًا على تعبير منطقي واحد، أو تعبيرًا منطقيًا مجمّعًا داخل قوسين، أو تعبيرًا أحاديًا. يُعرَّف LogicalExpr بشكل متكرر.
ExprExpr، وهو اختصار يعني التعبير، يمكن أن يكون LogicalExpr أو NIL.
تطابقيقارن MatchOp، أي مشغل مطابقة، سلسلة بثابت سلسلة أو بادئة سلسلة أو لاحقة أو ثابت لاحقة.
JsonArrayOpيتحقق JsonOp، أي مشغّل JSON، مما إذا كان المعرف المحدد يحتوي على العناصر المحددة.
ArrayOpيتحقق ArrayOp، أي مشغّل مصفوفة، من احتواء المعرّف المحدّد على العناصر المحدّدة.

المشغلات

المشغلات المنطقية

يقوم المشغلات المنطقية بإجراء مقارنة بين تعبيرين.

الرمزعمليةمثالالوصف
'و' &&&وexpr1 & & expr2صحيح إذا كان كل من expr1 و expr2 صحيحين.
'أو' ||أوexpr1 || expr2صحيح إذا كان كل من expr1 أو expr2 صحيحين.

العوامل الحسابية الثنائية

تحتوي العوامل الحسابية الثنائية على معاملين ويمكنها إجراء عمليات حسابية أساسية وإرجاع النتيجة المقابلة.

الرمزالعمليةمثالالوصف
+الإضافةأ + بجمع المعاملين.
-الطرحأ - باطرح المعامل الثاني من المعامل الأول.
*الضربأ * بضرب المعاملين.
/القسمةأ/بقسمة المعامل الأول على المعامل الثاني.
**القوةأ ** بارفع المعامل الأول إلى قوة المعامل الثاني.
%مودولوأ % بقسمة المعامل الأول على المعامل الثاني وإعطاء الجزء المتبقي.

العوامل العلائقية

تستخدم العوامل العلائقية الرموز للتحقق من التساوي أو عدم المساواة أو الترتيب النسبي بين تعبيرين.

الرمزالعمليةمثالالوصف
<أقل منأ <بصحيح إذا كان a أقل من b.
>أكبر منأ > بصحيح إذا كانت أ أكبر من ب.
==يساويأ = = بصواب إذا كان أ يساوي ب.
!=لا يساويأ != بصواب إذا كان أ لا يساوي ب.
<=أقل من أو يساويأ <= بصواب إذا كان أ أقل من أو يساوي ب.
>=أكبر من أو يساويأ >= بصواب إذا كان أ أكبر من أو يساوي ب.

أسبقية وربط العوامل

يسرد الجدول التالي أسبقية وربط المعاملات. يتم سرد المعاملات من الأعلى إلى الأسفل، بأسبقية تنازلية.

الأسبقيةالمعاملالوصفالارتباطية
1+ -يونياري أرثوبمن اليسار إلى اليمين
2لايونياري لوجيكوبمن اليمين إلى اليسار
3**ثنائي أرثوبمن اليسار إلى اليمين
4* / %BinaryArithOpمن اليسار إلى اليمين
5+ -BinaryArithOpمن اليسار إلى اليمين
6< <= > >>=CmpOpمن اليسار إلى اليمين
7== !=CmpOpمن اليسار إلى اليمين
8مثل LIKEماتشوبوبمن اليسار إلى اليمين
9json_contains JSON_CONTAINSJsonArrayOpمن اليسار إلى اليمين
9مصفوفة_تحتوي على ARRAY_CONTAINSمصفوفةمن اليسار إلى اليمين
10json_contains_all JSON_CONTAINS_ALLJsonArrayOpمن اليسار إلى اليمين
10صفيف_يحتوي_الجميع ARRAY_CONTAINS_ALLمصفوفةمن اليسار إلى اليمين
11json_concontains_any JSON_CONTAINS_ANYJsonArrayOpمن اليسار إلى اليمين
11مصفوفة_تحتوي_على_أي ARRAY_CONTAINS_ANYمصفوفةمن اليسار إلى اليمين
12طول_المصفوفة ARRAY_LENGTHمصفوفةمن اليسار إلى اليمين
13و&وBinaryLogicOpمن اليسار إلى اليمين
14| أوBinaryLogicOpمن اليسار إلى اليمين

يتم تقييم التعبيرات عادةً من اليسار إلى اليمين. يتم تقييم التعبيرات المعقدة واحدًا تلو الآخر. يتم تحديد ترتيب تقييم التعبيرات حسب أسبقية العوامل المستخدمة.

إذا احتوى تعبير ما على عاملين أو أكثر بنفس الأسبقية، يتم تقييم العامل الموجود إلى اليسار أولاً.

على سبيل المثال، سيتم تقييم 10/2 * 5 على أنه (10/2) والناتج مضروبًا في 5.

عندما يجب أن تتم معالجة عملية ذات أسبقية أقل أولاً، يجب أن تكون بين قوسين.

على سبيل المثال، 30 / 2 + 8. يتم تقييم ذلك عادةً على أنه 30 مقسومًا على 2 ثم 8 مضافًا إلى الناتج. إذا كنت تريد القسمة على 2 + 8، يجب أن تُكتب على شكل 30 / (2 + 8).

يمكن تداخل الأقواس داخل التعبيرات. يتم تقييم التعبيرات القوسية الداخلية أولًا.

الاستخدام

يتم سرد نماذج لجميع استخدامات التعبيرات المنطقية المتاحة في ميلفوس على النحو التالي (int64 يمثل الحقل القياسي الذي يحتوي على بيانات من نوع INT64، float يمثل الحقل القياسي الذي يحتوي على بيانات من نوع الفاصلة العائمة، و VARCHAR يمثل الحقل القياسي الذي يحتوي على بيانات من نوع VARCHAR):

  1. CmpOp
"int64 > 0"
"0 < int64 < 400"
"500 <= int64 < 1000"
VARCHAR > "str1"
  1. BinaryLogicalOp والقوسين
"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)"
  1. مصطلحExpr و UnaryLogicOp
"int64 not in [1, 2, 3]"
VARCHAR not in ["str1", "str2"]
  1. TermExpr وBinaryLogicalOp وCmpOp (على حقول مختلفة)
"int64 in [1, 2, 3] and float != 2"
  1. BinaryLogicalOp وCmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
  1. CmpOp و UnaryArithOp أو BinaryArithOp
"200+300 < int64 <= 500+500"
  1. تطابق
VARCHAR like "prefix%"
VARCHAR like "%suffix"
VARCHAR like "%middle%"
VARCHAR like "_suffix"
  1. JsonArrayOp
  • JSON_CONTAINS(identifier, JsonExpr)

    إذا كان تعبير JSON الخاص بعبارة JSON_CONTAINS (الوسيطة الثانية) قائمة، فيجب أن يكون المعرف (الوسيطة الأولى) قائمة قائمة قائمة. خلاف ذلك، يتم تقييم العبارة دائمًا إلى خطأ.

    # {"x": [1,2,3]}
    json_contains(x, 1) # ==> true
    json_contains(x, "a") # ==> false
        
    # {"x": [[1,2,3], [4,5,6], [7,8,9]]}
    json_contains(x, [1,2,3]) # ==> true
    json_contains(x, [3,2,1]) # ==> false
    
  • JSON_CONTAINS_ALL(identifier, JsonExpr)

    يجب أن يكون تعبير JSON في عبارة JSON_CONTAINS_ALL دائمًا قائمة.

    # {"x": [1,2,3,4,5,7,8]}
    json_contains_all(x, [1,2,8]) # ==> true
    json_contains_all(x, [4,5,6]) # ==> false 6 is not exists
    
  • JSON_CONTAINS_ANY(identifier, JsonExpr)

    يجب أن يكون تعبير JSON في عبارة JSON_CONTAINS_ANY دائمًا قائمة. وإلا فإنها تعمل مثل JSON_CONTAINS.

    # {"x": [1,2,3,4,5,7,8]}
    json_contains_any(x, [1,2,8]) # ==> true
    json_contains_any(x, [4,5,6]) # ==> true
    json_contains_any(x, [6,9]) # ==> false
    
  1. مصفوفة
  • ARRAY_CONTAINS(identifier, ArrayExpr)

    إذا كان تعبير المصفوفة في عبارة ARRAY_CONTAINS (الوسيطة الثانية) قائمة، فيجب أن يكون المعرف (الوسيطة الأولى) قائمة قائمة قائمة. وإلا فإن العبارة تُقيّم دائمًا على خطأ.

    # 'int_array': [1,2,3]
    array_contains(int_array, 1) # ==> true
    array_contains(int_array, "a") # ==> false
    
  • ARRAY_CONTAINS_ALL(identifier, ArrayExpr)

    يجب أن يكون تعبير الصفيف في عبارة ARRAY_CONTAINS_ALL دائمًا قائمة.

    # "int_array": [1,2,3,4,5,7,8]
    array_contains_all(int_array, [1,2,8]) # ==> true
    array_contains_all(int_array, [4,5,6]) # ==> false 6 is not exists
    
  • ARRAY_CONTAINS_ANY(identifier, ArrayExpr)

    يجب أن يكون تعبير الصفيف في عبارة ARRAY_CONTAINS_ANY دائمًا قائمة. وإلا فإنها تعمل مثل ARRAY_CONTAINS.

    # "int_array": [1,2,3,4,5,7,8]
    array_contains_any(int_array, [1,2,8]) # ==> true
    array_contains_any(int_array, [4,5,6]) # ==> true
    array_contains_any(int_array, [6,9]) # ==> false
    
  • ARRAY_LENGTH(identifier)

    تحقق من عدد العناصر في مصفوفة.

    # "int_array": [1,2,3,4,5,7,8]
    array_length(int_array) # ==> 7
    

ما التالي

الآن بعد أن تعرفت على كيفية عمل مجموعات البتات في ميلفوس، قد ترغب أيضًا في:

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟