Truy vấn có điều kiện
Chủ đề này giới thiệu cách thực hiện truy vấn có điều kiện.
Khác với việc tìm kiếm tương đồng trên vectơ, truy vấn có điều kiện trả về vectơ sử dụng bộ lọc vô hướng thông qua các biểu thức logic. Milvus hỗ trợ truy vấn trên các trường vô hướng và các biểu thức logic khác nhau. Biểu thức logic có thể được sử dụng để lọc các trường vô hướng hoặc trường khóa chính để trả về tất cả kết quả phù hợp với điều kiện lọc.
Ví dụ sau minh họa cách truy vấn một bộ dữ liệu gồm 2000 dòng sách, bao gồm ID sách (khóa chính), số từ (trường vô hướng), và giới thiệu sách (trường vectơ), mô phỏng kịch bản truy vấn một cuốn sách cụ thể dựa trên ID của nó.
Tải bộ sưu tập
Trước khi thực hiện truy vấn, bộ sưu tập cần được tải vào bộ nhớ.
from pymilvus import Collection
collection = Collection("book") # Lấy một bộ sưu tập hiện có.
collection.load()
Thực hiện Truy vấn
Ví dụ sau lọc vectơ dựa trên các giá trị book_id
cụ thể và trả về trường book_id
và trường book_intro
trong kết quả.
Milvus hỗ trợ thiết lập cấp độ nhất quán cho các truy vấn. Ví dụ trong chủ đề này thiết lập cấp độ nhất quán là Mạnh mẽ
. Bạn cũng có thể thiết lập cấp độ nhất quán là Giới hạn
, Phiên
, hoặc Cuối cùng
. Để biết thêm thông tin về bốn cấp độ nhất quán trong Milvus, vui lòng tham khảo Chính sách nhất quán.
Bạn cũng có thể sử dụng các trường động trong biểu thức lọc và chỉ định các trường đầu ra trong yêu cầu truy vấn. Ví dụ, xem Chế độ Schema Động.
res = collection.query(
expr = "book_id in [2,4,6,8]",
offset = 0,
limit = 10,
output_fields = ["book_id", "book_intro"],
)
Tham số | Mô tả |
---|---|
expr |
Biểu thức logic được sử dụng để lọc các thuộc tính. Để biết thêm chi tiết về quy tắc biểu thức logic, vui lòng tham khảo Quy tắc Biểu thức Logic. |
limit |
Số lượng kết quả tương đồng nhất để trả về. Tổng của giá trị này và offset phải nhỏ hơn 16384. |
offset |
Số lượng kết quả để bỏ qua trong bộ sưu tập. Chỉ có sẵn khi limit được chỉ định và tổng của giá trị này và limit phải nhỏ hơn 16384. Ví dụ, nếu bạn muốn truy vấn các hàng xóm gần thứ 9 và thứ 10 của một vectơ, thiết lập limit là 2 , và offset là 8 . |
output_fields (tùy chọn) |
Danh sách tên trường để trả về. |
partition_names (tùy chọn) |
Danh sách tên phân vùng để truy vấn. |
consistency_level (tùy chọn) |
Cấp độ nhất quán cho truy vấn. |
Kiểm tra kết quả trả về.
sorted_res = sorted(res, key=lambda k: k['book_id'])
sorted_res
Đếm Thực thể
Khi thực hiện truy vấn, bạn có thể thêm count(*)
vào output_fields
để Milvus có thể trả về số lượng thực thể trong bộ sưu tập. Nếu bạn muốn đếm số lượng thực thể đáp ứng điều kiện cụ thể, sử dụng expr
để xác định một biểu thức logic.
Đếm tất cả các thực thể trong bộ sưu tập:
res = collection.query(
expr="",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Đếm số lượng thực thể đáp ứng các điều kiện lọc cụ thể:
res = collection.query(
expr="book_id in [2,4,6,8]",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Hạn chế
Khi sử dụng count(*)
trong output_fields
, việc sử dụng tham số limit
bị cấm.