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()