กฎของสมการตรรกะ
บทนี้จะนำเสนอวิธีการเขียนสมการเงื่อนไขคิวรี
ภาพรวม
สมการเงื่อนไขจะแสดงผลลัพธ์เป็นค่าบูลีน Milvus จะกรองสเกลลาร์โดยใช้เงื่อนไข ในการประเมินสมการเงื่อนไข จะคืนค่า TRUE หรือ FALSE โปรดอ้างถึงคู่มือ API ของ Python SDK สำหรับคำแนะนำในการใช้เงื่อนไข
ตัวดำเนินการ
ตัวดำเนินการตรรกะ
ตัวดำเนินการตรรกะเปรียบเทียบสองสมการ
สัญลักษณ์ | การทำงาน | ตัวอย่าง | คำอธิบาย |
---|---|---|---|
'and' && | AND | expr1 && expr2 | คืนค่า True เมื่อทั้ง expr1 และ expr2 เป็นจริง |
'or' || | 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)
วงเล็บสามารถซ้อนกับสมการ การวงเล็บภายในที่ลึกที่สุดจะถูกประเมินก่อน
ตัวอย่างเงื่อนไข
นี่คือตัวอย่างของการใช้ boolean expressions ทั้งหมดที่มีให้ใน Milvus (int64
แทนฟิลด์ในรูปแบบ scalar ที่เก็บข้อมูลประเภท INT64, float
แทนฟิลด์ในรูปแบบ scalar ที่เก็บข้อมูลประเภท floating-point, และ VARCHAR
แทนฟิลด์ในรูปแบบ scalar ที่เก็บข้อมูลประเภท VARCHAR):
- Comparison expression
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
- การดำเนินการด้วยตรรกะและวงเล็บ
"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)"
- in expression
Milvus รองรับการลบ entities ที่มี primary keys ที่กำหนดโดยชัดเจนเท่านั้น ซึ่งสามารถทำได้ผ่านการใช้ term expression in
.
"int64 not in [1, 2, 3]"
VARCHAR not in ["str1", "str2"]
- 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 "prefix%"
- JsonArrayOp
-
JSON_CONTAINS(identifier, JsonExpr)
หาก JSON expression ในคำสั่ง
JSON_CONTAINS
(พารามิเตอร์ที่สอง) เป็นรายการ ตัวแทน (พารามิเตอร์ที่หนึ่ง) ควรเป็นรายการของรายการ มิฉะนั้น คำสั่งนี้จะประเมินเป็น False เสมอ
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 expression ในคำสั่ง
JSON_CONTAINS_ALL
ควรเป็นรายการเสมอ
json_contains_all(x, [1,2,8]) # ==> จริง
json_contains_all(x, [4,5,6]) # ==> เท็จ (6 ไม่มีอยู่)
-
JSON_CONTAINS_ANY(identifier, JsonExpr)
JSON expression ในคำสั่ง
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]) # ==> เท็จ