قواعد التعبيرات المنطقية

هذا الفصل يقدم كيفية كتابة تعبيرات شرط الاستعلام.

نظرة عامة

تعبير الجملة يخرج قيمة منطقية. يقوم Milvus بتصفية القيم العلمية باستخدام الجمل الشرطية. عند تقييم تعبير الجملة الشرطية، سيُرجع TRUE أو FALSE. يُرجى الرجوع إلى دليل واجهة برمجة التطبيقات لـ Python SDK للحصول على إرشادات بشأن استخدام تعبيرات الجملة الشرطية.

العمليات

العمليات المنطقية

العمليات المنطقية تقارن بين تعبيرين.

الرمز العملية المثال الوصف
'&&' AND expr1 && expr2 يُرجع True عندما يكون كل من expr1 و expr2 صحيح.
'||' OR expr1 || expr2 يُرجع True عندما يكون إما expr1 أو expr2 صحيح.

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

العمليات الحسابية الثنائية تأخذ مشغلين وتقوم بعمليات حسابية أساسية، مع إرجاع النتيجة المقابلة.

الرمز العملية المثال الوصف
+ جمع a + b يُضيف المشغلان معًا.
- طرح a - b يُطرح المشغل الثاني من الأول.
* ضرب a * b يُضرب المشغلان معًا.
/ قسمة a / b يقوم بقسمة المشغل الأول على الثاني.
** رفع للقوة a ** b يرفع المشغل الأول لقوة المشغل الثاني.
% باقي القسمة a % b يقوم بقسمة المشغل الأول على الثاني ويرجع الباقي.

العمليات العلاقية

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

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

أولوية العمليات والترابط

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

الأولوية العملية الوصف الترابط
1 + - عمليات الحساب الأحادي من اليسار إلى اليمين
2 not المشغل المنطقي الأحادي من اليمين إلى اليسار
3 ** المشغل الحسابي الثنائي من اليسار إلى اليمين
4 * / % المشغل الحسابي الثنائي من اليسار إلى اليمين
5 + - المشغل الحسابي الثنائي من اليسار إلى اليمين
6 < <= > >= عمليات القارنة من اليسار إلى اليمين
7 == != عمليات القارنة من اليسار إلى اليمين
8 like LIKE مشغل المطابقة من اليسار إلى اليمين
9 json_contains JSON_CONTAINS مشغل JsonArray من اليسار إلى اليمين
10 json_contains_all JSON_CONTAINS_ALL مشغل JsonArray من اليسار إلى اليمين
11 json_contains_any JSON_CONTAINS_ANY مشغل JsonArray من اليسار إلى اليمين
12 && and المشغل المنطقي الثنائي من اليسار إلى اليمين
13 || or المشغل المنطقي الثنائي من اليسار إلى اليمين

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

إذا تضمن تعبير تشغيلي استخدام مشغلين أو أكثر بنفس واجب الأولوية، يُقيَّم المشغل الأقصى الأيسر أولاً.

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

عندما يكون من الضروري إيلاء الأولوية لعمليات واجب الأولوية الأدنى، يجب تضمينها في أقواس.

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

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

شروط المثال

فيما يلي بعض أمثلة على جميع تعابير المنطق البولياني المتاحة في Milvus (int64 يمثل حقلًا علميًا يحتوي على بيانات نوع INT64، float يمثل حقلًا علميًا يحتوي على بيانات النقطة المُعلَقة، وVARCHAR يمثل حقلًا علميًا يحتوي على بيانات نوع VARCHAR):

  1. تعبير المقارنة
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
  1. العمليات المنطقية والأقواس
"(int64 > 0 && int64 < 400) أو (int64 > 500 && int64 < 1000)"
  1. في التعبير

يدعم Milvus فقط حذف الكيانات ذات المفاتيح الأساسية المحددة صراحة، ويمكن تحقيق ذلك فقط من خلال تعبير المصطلح in.

"int64 ليس في [1, 2, 3]"
VARCHAR ليس في ["str1", "str2"]
  1. TermExpr، BinaryLogicalOp، وCmpOp (على حقول مختلفة)
"int64 في [1, 2, 3] و float != 2"
  1. BinaryLogicalOp و CmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
  1. CmpOp و UnaryArithOp أو BinaryArithOp
"200+300 < int64"
  1. MatchOp (المطابقة بالبادئة)
VARCHAR مثل "بادئة%"
  1. JsonArrayOp
  • JSON_CONTAINS(identifier, JsonExpr)

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

json_contains(x, 1) # ==> صحيح
json_contains(x, "a") # ==> خاطئ

json_contains(x, [1,2,3]) # ==> صحيح
json_contains(x, [3,2,1]) # ==> خاطئ
  • JSON_CONTAINS_ALL(identifier, JsonExpr)

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

json_contains_all(x, [1,2,8]) # ==> صحيح
json_contains_all(x, [4,5,6]) # ==> خاطئ (6 غير موجود)
  • JSON_CONTAINS_ANY(identifier, JsonExpr)

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

json_contains_any(x, [1,2,8]) # ==> صحيح
json_contains_any(x, [4,5,6]) # ==> صحيح
json_contains_any(x, [6,9]) # ==> خاطئ