Aufbau eines Vektorindex
In diesem Leitfaden wird beschrieben, wie man in Milvus einen Vektorindex aufbaut.
Ein Vektorindex ist eine Metadaten-Organisationseinheit, die zur Beschleunigung der Suche nach Vektorähnlichkeiten verwendet wird. Ohne den Aufbau eines Index auf den Vektoren führt Milvus eine Brute-Force-Suche durch.
Standardmäßig werden in Milvus Segmente mit weniger als 1.024 Zeilen nicht indiziert.
Im folgenden Beispiel wird der Aufbau eines IVF_FLAT-Index mit 1024 Clustern unter Verwendung des euklidischen Abstands (L2) veranschaulicht. Sie können den Index und den Metriktyp wählen, die zu Ihrem Szenario passen.
Vorbereitung der Indexparameter
Befolgen Sie diese Schritte, um die Indexparameter vorzubereiten:
index_params = {
"metric_type":"L2",
"index_type":"IVF_FLAT",
"params":{"nlist":1024}
}
Parameter | Beschreibung | Optionen |
---|---|---|
metric_type |
Der Typ der Metrik, der zur Messung der Vektorähnlichkeit verwendet wird. | Für Gleitkommazahlen:- L2 (euklidische Distanz)- IP (inneres Produkt)- COSINE (Kosinusähnlichkeit)Für binäre Vektoren:- JACCARD (Jaccard-Distanz)- HAMMING (Hamming-Distanz) |
index_type |
Der Typ des Index, der zur Beschleunigung der Vektorsuche verwendet wird. | Für Gleitkommazahlen:- 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)Für binäre Vektoren:- BIN_FLAT (BIN_FLAT)- BIN_IVF_FLAT (BIN_IVF_FLAT) |
params |
Spezifische Konstruktionsparameter für den Index. | Weitere Informationen finden Sie unter Indexierung im Arbeitsspeicher und auf der Festplatte. |
- DISKANN hat bestimmte Voraussetzungen. Weitere Informationen finden Sie unter Indexierung auf der Festplatte.
- GPU_IVF_FLAT und GPU_IVF_PQ stehen nur in Milvus-Installationen mit aktivierter GPU-Unterstützung zur Verfügung.
Indexaufbau
Bauen Sie den Index auf, indem Sie den Vektorfeldnamen und die Indexparameter angeben.
from pymilvus import Collection, utility
collection = Collection("book")
collection.create_index(
field_name="book_intro",
index_params=index_params
)
utility.index_building_progress("book")
Parameter | Beschreibung |
---|---|
field_name |
Der Name des Vektorfelds, auf dem der Index aufgebaut werden soll. |
index_params |
Die Parameter des aufzubauenden Index. |
Aufbau eines Skalarindexes
Im Gegensatz zu Vektoren haben Skalare nur eine Größe und keine Richtung. Milvus betrachtet einzelne Zahlen und Zeichenketten als Skalare. Im Folgenden finden Sie die Liste der verfügbaren Datentypen für Skalarfelder in Milvus.
Ab Milvus v2.1.0 können Sie zur Beschleunigung der Attributfilterung bei hybriden Suchen einen Index auf Skalarfeldern erstellen. Weitere Informationen zur Indexierung von Skalarfeldern finden Sie hier.
Hinweis: Der Link für "hier" sollte durch den tatsächlichen Link ersetzt werden, der im Originaldokument angegeben ist.
Indexaufbau
Beim Aufbau eines Index auf einem Skalarfeld müssen keine Indexparameter festgelegt werden. Der Standardwert für den Indexnamen des Skalarfelds ist default_idx
, gefolgt vom Namen des indexierten Feldes. Sie können ihn auf andere geeignete Werte setzen, wenn Sie möchten.
Der folgende Code-Schnipsel setzt voraus, dass eine Sammlung mit dem Namen book
bereits existiert und ein Index auf dem Zeichenkettenfeld book_name
erstellt werden muss.
from pymilvus import Collection
collection = Collection("book")
collection.create_index(
field_name="book_name",
index_name="scalar_index",
)
collection.load()
Sobald der Index erstellt ist, können Sie einen booleschen Ausdruck für dieses Zeichenkettenfeld in der Suche nach Vektorähnlichkeiten einschließen, wie unten dargestellt:
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)
Löschen des Index
from pymilvus import Collection
collection = Collection("book") # Eine bestehende Sammlung erhalten.
collection.drop_index()