قوانین عبارتهای منطقی
این فصل نحوه نوشتن عبارات شرطی را معرفی میکند.
مرور
یک عبارت گزارهای یک مقدار بولی را خروجی میدهد. 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 را نشان میدهد):
- عبارت مقایسه
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "رشته1"
- عملیات منطقی و پرانتزها
"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)"
- عبارت in
Milvus تنها حذف انتیتیها را با کلید اصلی صریحاً تعریف شده پشتیبانی میکند که تنها از طریق عبارت in
قابل دستیابی است.
"int64 not in [1, 2, 3]"
VARCHAR not in ["رشته1", "رشته2"]
- TermExpr، BinaryLogicalOp و CmpOp (بر روی فیلدهای مختلف)
"int64 in [1, 2, 3] and float != 2"
- BinaryLogicalOp و CmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
- CmpOp و UnaryArithOp یا BinaryArithOp
"200+300 < int64"
- MatchOp (تطبیق پیشوند)
VARCHAR like "پیشوند%"
- 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