Quy tắc biểu thức logic
Chương này giới thiệu cách viết các biểu thức điều kiện truy vấn.
Tổng quan
Một biểu thức tiên đề trả về một giá trị boolean. Milvus sử dụng các tiên đề để lọc các số vô hướng. Khi đánh giá một biểu thức tiên đề, nó sẽ trả về TRUE hoặc FALSE. Vui lòng tham khảo tài liệu API SDK Python để biết hướng dẫn sử dụng các biểu thức tiên đề.
Toán tử
Toán tử Logic
Các toán tử logic so sánh hai biểu thức.
Ký hiệu | Phép toán | Ví dụ | Mô tả |
---|---|---|---|
'and' && | VÀ | expr1 && expr2 | Trả về True khi cả expr1 và expr2 đều đúng. |
'or' || | HOẶC | expr1 || expr2 | Trả về True khi either expr1 hoặc expr2 đúng. |
Toán tử Số học Nhị phân
Các toán tử số học nhị phân lấy hai toán hạng và thực hiện các phép toán cơ bản, trả về kết quả tương ứng.
Ký hiệu | Phép toán | Ví dụ | Mô tả |
---|---|---|---|
+ | Cộng | a + b | Cộng hai toán hạng với nhau. |
- | Trừ | a - b | Trừ toán hạng thứ hai từ toán hạng thứ nhất. |
* | Nhân | a * b | Nhân hai toán hạng. |
/ | Chia | a / b | Chia toán hạng thứ nhất cho toán hạng thứ hai. |
** | Lũy thừa | a ** b | Đưa toán hạng thứ nhất lên số mũ của toán hạng thứ hai. |
% | Phần dư | a % b | Chia toán hạng thứ nhất cho toán hạng thứ hai và trả về phần dư. |
Toán tử Quan hệ
Các toán tử quan hệ sử dụng ký hiệu để kiểm tra sự bằng nhau, khác nhau, hoặc thứ tự tương đối giữa hai biểu thức.
Ký hiệu | Phép toán | Ví dụ | Mô tả |
---|---|---|---|
< | Nhỏ hơn | a < b | Trả về True nếu a nhỏ hơn b. |
> | Lớn hơn | a > b | Trả về True nếu a lớn hơn b. |
== | Bằng | a == b | Trả về True nếu a bằng b. |
!= | Không bằng | a != b | Trả về True nếu a không bằng b. |
<= | Nhỏ hơn hoặc bằng | a <= b | Trả về True nếu a nhỏ hơn hoặc bằng b. |
>= | Lớn hơn hoặc bằng | a >= b | Trả về True nếu a lớn hơn hoặc bằng b. |
Thứ tự Ưu tiên và Tính liên kết của Toán tử
Bảng dưới đây liệt kê thứ tự ưu tiên và tính liên kết của các toán tử. Các toán tử được liệt kê theo thứ tự ưu tiên từ trên xuống dưới.
Ưu tiên | Toán tử | Mô tả | Tính liên kết |
---|---|---|---|
1 | + - | Toán tử số học một ngôi | Từ trái sang phải |
2 | not | Toán tử logic một ngôi | Từ phải sang trái |
3 | ** | Toán tử số học nhị phân | Từ trái sang phải |
4 | * / % | Toán tử số học nhị phân | Từ trái sang phải |
5 | + - | Toán tử số học nhị phân | Từ trái sang phải |
6 | < <= > >= | Các toán tử so sánh | Từ trái sang phải |
7 | == != | Các toán tử so sánh | Từ trái sang phải |
8 | like LIKE | Toán tử khớp | Từ trái sang phải |
9 | json_contains JSON_CONTAINS | Toán tử JsonArray | Từ trái sang phải |
10 | json_contains_all JSON_CONTAINS_ALL | Toán tử JsonArray | Từ trái sang phải |
11 | json_contains_any JSON_CONTAINS_ANY | Toán tử JsonArray | Từ trái sang phải |
12 | && and | Toán tử logic nhị phân | Từ trái sang phải |
13 | || or | Toán tử logic nhị phân | Từ trái sang phải |
Biểu thức thường được đánh giá từ trái sang phải. Các biểu thức phức tạp được đánh giá lần lượt. Thứ tự đánh giá của các biểu thức được xác định bởi sự ưu tiên của các toán tử sử dụng.
Nếu một biểu thức chứa hai hoặc nhiều toán tử có cùng sự ưu tiên, toán tử ở bên trái nhất được đánh giá trước.
Ví dụ, 10 / 2 * 5 sẽ được đánh giá như là (10 / 2) và kết quả sẽ được nhân với 5.
Khi cần ưu tiên các phép toán ưu tiên thấp hơn, chúng nên được đặt trong dấu ngoặc đơn.
Ví dụ, 30 / 2 + 8. Thông thường sẽ được tính là 30 chia cho 2, và sau đó cộng thêm 8 vào kết quả. Nếu muốn chia cho 2 + 8, nó nên được viết là 30 / (2 + 8).
Dấu ngoặc có thể được lồng trong một biểu thức. Dấu ngoặc ở bên trong cùng được đánh giá trước.
Điều kiện ví dụ
Dưới đây là một số ví dụ về tất cả các biểu thức boolean có sẵn trong Milvus (int64
đại diện cho một trường scalar chứa dữ liệu kiểu INT64, float
đại diện cho một trường scalar chứa dữ liệu kiểu số thực, và VARCHAR
đại diện cho một trường scalar chứa dữ liệu kiểu VARCHAR):
- Biểu thức so sánh
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
- Các phép toán logic và dấu ngoặc
"(int64 > 0 && int64 < 400) hoặc (int64 > 500 && int64 < 1000)"
- Biểu thức in
Milvus chỉ hỗ trợ xóa các thực thể có khóa chính được xác định một cách rõ ràng, điều này chỉ có thể được thực hiện thông qua biểu thức điều kiện in
.
"int64 not in [1, 2, 3]"
VARCHAR not in ["str1", "str2"]
- TermExpr, BinaryLogicalOp, và CmpOp (trên các trường khác nhau)
"int64 in [1, 2, 3] và float != 2"
- BinaryLogicalOp và CmpOp
"int64 == 0 hoặc int64 == 1 hoặc int64 == 2"
- CmpOp và UnaryArithOp hoặc BinaryArithOp
"200+300 < int64"
- MatchOp (khớp tiền tố)
VARCHAR like "tiền_tố%"
- JsonArrayOp
-
JSON_CONTAINS(identifier, JsonExpr)
Nếu biểu thức JSON trong câu lệnh
JSON_CONTAINS
(tham số thứ hai) là một danh sách, thì identifier (tham số đầu tiên) phải là một danh sách các danh sách. Nếu không, câu lệnh luôn luôn được đánh giá là Sai.
json_contains(x, 1) # ==> đúng
json_contains(x, "a") # ==> sai
json_contains(x, [1,2,3]) # ==> đúng
json_contains(x, [3,2,1]) # ==> sai
-
JSON_CONTAINS_ALL(identifier, JsonExpr)
Biểu thức JSON trong câu lệnh
JSON_CONTAINS_ALL
luôn phải là một danh sách.
json_contains_all(x, [1,2,8]) # ==> đúng
json_contains_all(x, [4,5,6]) # ==> sai (6 không tồn tại)
-
JSON_CONTAINS_ANY(identifier, JsonExpr)
Biểu thức JSON trong câu lệnh
JSON_CONTAINS_ANY
luôn phải là một danh sách. Nếu không, hành vi của nó giống nhưJSON_CONTAINS
.
json_contains_any(x, [1,2,8]) # ==> đúng
json_contains_any(x, [4,5,6]) # ==> đúng
json_contains_any(x, [6,9]) # ==> sai