قوانین عبارت‌های منطقی

این فصل نحوه نوشتن عبارات شرطی را معرفی می‌کند.

مرور

یک عبارت گزاره‌ای یک مقدار بولی را خروجی می‌دهد. Milvus اسکالرها را با استفاده از گزاره‌ها فیلتر می‌کند. هنگام ارزیابی یک عبارت گزاره‌ای، مقدار TRUE یا FALSE برمی‌گرداند. لطفاً برای راهنمایی در استفاده از عبارات گزاره‌ای به مرجع API 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 > "رشته1"
  1. عملیات منطقی و پرانتزها
"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)"
  1. عبارت in

Milvus تنها حذف انتیتی‌ها را با کلید اصلی صریحاً تعریف شده پشتیبانی می‌کند که تنها از طریق عبارت in قابل دستیابی است.

"int64 not in [1, 2, 3]"
VARCHAR not in ["رشته1", "رشته2"]
  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"
  1. MatchOp (تطبیق پیشوند)
VARCHAR like "پیشوند%"
  1. JsonArrayOp
  • JSON_CONTAINS(شناسه, JsonExpr)

    اگر عبارت JSON در دستور JSON_CONTAINS (پارامتر دوم) یک لیست باشد، شناسه (پارامتر اول) باید یک لیست از لیست‌ها باشد. در غیر این صورت، دستور همیشه به صورت غلط ارزیابی می‌شود.

json_contains(x, 1) # ==> true
json_contains(x, "a") # ==> false

json_contains(x, [1,2,3]) # ==> true
json_contains(x, [3,2,1]) # ==> false
  • JSON_CONTAINS_ALL(شناسه, JsonExpr)

    عبارت JSON در دستور JSON_CONTAINS_ALL باید همیشه یک لیست باشد.

json_contains_all(x, [1,2,8]) # ==> true
json_contains_all(x, [4,5,6]) # ==> false (۶ وجود ندارد)
  • JSON_CONTAINS_ANY(شناسه, JsonExpr)

    عبارت JSON در دستور JSON_CONTAINS_ANY باید همیشه یک لیست باشد. در غیر این صورت، رفتار آن با JSON_CONTAINS یکسان است.

json_contains_any(x, [1,2,8]) # ==> true
json_contains_any(x, [4,5,6]) # ==> true
json_contains_any(x, [6,9]) # ==> false