Budowanie indeksu wektorowego

Ten przewodnik opisuje, jak zbudować indeks wektorowy w Milvus.

Indeks wektorowy to jednostka organizacji metadanych używana do przyspieszenia wyszukiwania podobieństwa wektorów. Bez budowy indeksu na wektorach, Milvus będzie wykonywał wyszukiwanie brute-force.

Domyślnie Milvus nie indeksuje segmentów z mniej niż 1 024 wierszami.

Poniższy przykład ilustruje budowanie indeksu IVF_FLAT z 1024 klastrami, używając odległości euklidesowej (L2). Możesz wybrać indeks i rodzaj miary odpowiednie dla twojego przypadku użycia.

Przygotowanie parametrów indeksu

Postępuj zgodnie z poniższymi krokami, aby przygotować parametry indeksu:

index_params = {
  "metric_type":"L2",
  "index_type":"IVF_FLAT",
  "params":{"nlist":1024}
}
Parametr Opis Opcje
metric_type Rodzaj miary używanej do pomiaru podobieństwa wektorów. Dla wektorów zmiennoprzecinkowych:- L2 (odległość euklidesowa)- IP (iloczyn skalarny)- COSINE (podobieństwo kosinusowe)Dla wektorów binarnych:- JACCARD (odległość Jaccarda)- HAMMING (odległość Hamminga)
index_type Rodzaj indeksu używanego do przyspieszenia wyszukiwania wektorów. Dla wektorów zmiennoprzecinkowych:- 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)Dla wektorów binarnych:- BIN_FLAT (BIN_FLAT)- BIN_IVF_FLAT (BIN_IVF_FLAT)
params Konkretne parametry konstrukcyjne dla indeksu. Aby uzyskać więcej informacji, patrz Indeksowanie w pamięci i na dysku.
  • DISKANN ma pewne wymagania wstępne. Aby uzyskać więcej informacji, patrz Indeksowanie na dysku.
  • GPU_IVF_FLAT i GPU_IVF_PQ są dostępne tylko w instalacjach Milvus z obsługą GPU.

Budowa indeksu

Zbuduj indeks, określając nazwę pola wektorowego i parametry indeksu.

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

utility.index_building_progress("book")

Parametr Opis
field_name Nazwa pola wektorowego, na którym ma być zbudowany indeks.
index_params Parametry indeksu do zbudowania.

Budowanie indeksu skalarnej

W odróżnieniu od wektorów, skalarnych mają tylko wielkość, a nie kierunek. Milvus traktuje pojedyncze liczby i ciągi znaków jako skalary. Poniżej znajduje się lista dostępnych typów danych dla pól skalarnej w Milvus.

Począwszy od wersji Milvus v2.1.0, aby przyspieszyć filtrowanie atrybutów w hybrydowych wyszukiwaniach, można zbudować indeks na polach skalarnej. Więcej informacji na temat indeksowania pól skalarnej można znaleźć tutaj.

Uwaga: Link dla "tutaj" powinien zostać zastąpiony rzeczywistym linkiem określonym w oryginalnym dokumencie.

Budowanie indeksu

Podczas budowania indeksu na polu skalarnej, nie trzeba ustawiać żadnych parametrów indeksu. Domyślna wartość nazwy indeksu pola skalarnej to default_idx, a następnie nazwa zindeksowanego pola. Można ją zmienić na inną odpowiednią wartość, jeśli się chce.

Poniższy fragment kodu zakłada, że istnieje już kolekcja o nazwie book, a na polu łańcuchowym book_name należy utworzyć indeks.

from pymilvus import Collection

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

Gdy indeks zostanie utworzony, można uwzględnić wyrażenie logiczne dla tego pola łańcuchowego w wyszukiwaniu podobieństwa wektorów, jak pokazano poniżej:

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)

Usuwanie indeksu

from pymilvus import Collection
collection = Collection("book")      # Pobierz istniejącą kolekcję.
collection.drop_index()