กฎของสมการตรรกะ

บทนี้จะนำเสนอวิธีการเขียนสมการเงื่อนไขคิวรี

ภาพรวม

สมการเงื่อนไขจะแสดงผลลัพธ์เป็นค่าบูลีน 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):

  1. Comparison expression
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
  1. การดำเนินการด้วยตรรกะและวงเล็บ
"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)"
  1. in expression

Milvus รองรับการลบ entities ที่มี primary keys ที่กำหนดโดยชัดเจนเท่านั้น ซึ่งสามารถทำได้ผ่านการใช้ term expression in.

"int64 not in [1, 2, 3]"
VARCHAR not in ["str1", "str2"]
  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 "prefix%"
  1. 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]) # ==> เท็จ