Xây dựng Chỉ số Vector

Hướng dẫn này mô tả cách xây dựng một chỉ mục vector trong Milvus.

Một chỉ mục vector là một đơn vị tổ chức siêu dữ liệu được sử dụng để tăng tốc tìm kiếm tương tự vector. Nếu không xây dựng một chỉ mục trên các vector, Milvus sẽ thực hiện một tìm kiếm lực brut.

Mặc định, Milvus không index các phân đoạn có ít hơn 1,024 hàng.

Ví dụ dưới đây minh họa việc xây dựng một chỉ mục IVF_FLAT với 1024 cụm sử dụng khoảng cách Euclide (L2). Bạn có thể chọn loại chỉ mục và kiểu đo lường phù hợp với kịch bản của mình.

Chuẩn bị Tham số Chỉ mục

Thực hiện các bước sau để chuẩn bị các tham số chỉ mục:

index_params = {
  "metric_type":"L2",
  "index_type":"IVF_FLAT",
  "params":{"nlist":1024}
}
Tham số Mô tả Tùy chọn
metric_type Loại đo lường được sử dụng để đo độ tương tự vector. Đối với vector dấu phẩy động:- L2 (Khoảng cách Euclide)- IP (tích vô hướng)- COSINE (tương đồng cosin)Đối với vector nhị phân:- JACCARD (Khoảng cách Jaccard)- HAMMING (Khoảng cách Hamming)
index_type Loại chỉ mục được sử dụng để tăng tốc tìm kiếm vector. Đối với vector dấu phẩy động:- FLAT (FLAT)- IVF_FLAT (IVF_FLAT)- IVF_SQ8 (IVF_SQ8)- IVF_PQ (IVF_PQ)- GPU_IVF_FLAT* (GPU_IVF_FLAT)- GPU_IVF_PQ*> (GPU_IVF_PQ)- HNSW (HNSW)- DISKANN* (DISKANN)Đối với vector nhị phân:- BIN_FLAT (BIN_FLAT)- BIN_IVF_FLAT (BIN_IVF_FLAT)
params Các tham số xây dựng cụ thể cho chỉ mục. Để biết thêm thông tin, xem Xây dựng Chỉ mục Trong Bộ Nhớ và Trên Đĩa.
  • DISKANN có một số yêu cầu tiên quyết. Để biết thêm thông tin, xem Xây dựng Chỉ mục Trên Đĩa.
  • GPU_IVF_FLATGPU_IVF_PQ chỉ có sẵn trong cài đặt Milvus với hỗ trợ GPU được bật.

Xây dựng Chỉ mục

Xây dựng chỉ mục bằng cách chỉ định tên trường vector và các tham số chỉ mục.

from pymilvus import Collection, utility
collection = Collection("book")
collection.create_index(
  field_name="book_intro",
  index_params=index_params
)

utility.index_building_progress("book")
Tham số Mô tả
field_name Tên trường vector mà chỉ mục sẽ được xây dựng.
index_params Các tham số của chỉ mục cần xây dựng.

Xây dựng Chỉ số Scalar

Không giống như vector, scalar chỉ có độ lớn và không có hướng. Milvus xem xét từng số và chuỗi riêng lẻ là scalars. Dưới đây là danh sách các loại dữ liệu sẵn có cho các trường scalar trong Milvus.

Bắt đầu từ Milvus v2.1.0, để tăng tốc việc lọc thuộc tính trong tìm kiếm kết hợp, bạn có thể xây dựng một chỉ mục trên các trường scalar. Bạn có thể đọc thêm về chỉ mục trường scalar tại đây.

Lưu ý: Liên kết cho "tại đây" cần phải được thay thế bằng liên kết thực tế được chỉ định trong tài liệu gốc.

Xây dựng Chỉ mục

Khi xây dựng một chỉ mục trên trường scalar, bạn không cần thiết lập bất kỳ tham số chỉ mục nào. Giá trị mặc định cho tên chỉ mục của trường scalar là default_idx, tiếp theo là tên của trường được chỉ mục. Bạn có thể đặt giá trị khác phù hợp nếu muốn.

Đoạn mã dưới đây giả định rằng một bộ sưu tập có tên book đã tồn tại và một chỉ mục cần phải được tạo trên trường chuỗi book_name.

from pymilvus import Collection

collection = Collection("book")   
collection.create_index(
  field_name="book_name", 
  index_name="scalar_index",
)
collection.load()

Khi chỉ mục được tạo, bạn có thể bao gồm một biểu thức logic cho trường chuỗi này trong tìm kiếm tương tự vector, như dưới đây:

search_param = {
  "data": [[0.1, 0.2]],
  "anns_field": "book_intro",
  "param": {"metric_type": "L2", "params": {"nprobe": 10}},
  "limit": 2,
  "expr": "book_name like \"Hello%\"", 
}
res = collection.search(**search_param)

Xóa Chỉ mục

from pymilvus import Collection
collection = Collection("book")      # Lấy một bộ sưu tập hiện có.
collection.drop_index()