قواعد التعبيرات المنطقية
هذا الفصل يقدم كيفية كتابة تعبيرات شرط الاستعلام.
نظرة عامة
تعبير الجملة يخرج قيمة منطقية. يقوم 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):
- تعبير المقارنة
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
- العمليات المنطقية والأقواس
"(int64 > 0 && int64 < 400) أو (int64 > 500 && int64 < 1000)"
- في التعبير
يدعم Milvus فقط حذف الكيانات ذات المفاتيح الأساسية المحددة صراحة، ويمكن تحقيق ذلك فقط من خلال تعبير المصطلح in
.
"int64 ليس في [1, 2, 3]"
VARCHAR ليس في ["str1", "str2"]
- TermExpr، BinaryLogicalOp، وCmpOp (على حقول مختلفة)
"int64 في [1, 2, 3] و float != 2"
- BinaryLogicalOp و CmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
- CmpOp و UnaryArithOp أو BinaryArithOp
"200+300 < int64"
- MatchOp (المطابقة بالبادئة)
VARCHAR مثل "بادئة%"
- 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]) # ==> خاطئ