INVERTED
Wenn Sie häufig Filterabfragen auf Ihren Daten durchführen müssen, können INVERTED Indizes die Abfrageleistung drastisch verbessern. Anstatt alle Dokumente zu durchsuchen, verwendet Milvus invertierte Indizes, um schnell die genauen Datensätze zu finden, die Ihren Filterbedingungen entsprechen.
Wann sollte man INVERTED-Indizes verwenden?
Verwenden Sie INVERTED-Indizes, wenn Sie Folgendes benötigen:
Nach bestimmten Werten filtern: Alle Datensätze finden, bei denen ein Feld einem bestimmten Wert entspricht (z. B.
category == "electronics")Textinhalte filtern: Effiziente Suchen in
VARCHARFeldern durchführenAbfrage von JSON-Feldwerten: Filtern nach bestimmten Schlüsseln innerhalb von JSON-Strukturen
Leistungsvorteil: INVERTED-Indizes können die Abfragezeit bei großen Datensätzen von Sekunden auf Millisekunden reduzieren, da keine vollständigen Auflistungsscans mehr erforderlich sind.
Wie INVERTED-Indizes funktionieren
Ein INVERTED-Index in Milvus ordnet jeden eindeutigen Feldwert (Term) dem Satz von Dokument-IDs zu, in denen dieser Wert vorkommt. Diese Struktur ermöglicht eine schnelle Suche nach Feldern mit sich wiederholenden oder kategorischen Werten.
Wie im Diagramm dargestellt, läuft der Prozess in zwei Schritten ab:
Vorwärtszuordnung (ID → Begriff): Jede Dokument-ID verweist auf den in ihr enthaltenen Feldwert.
Umgekehrtes Mapping (Term → IDs): Milvus sammelt eindeutige Begriffe und erstellt ein umgekehrtes Mapping von jedem Begriff zu allen IDs, die ihn enthalten.
Zum Beispiel wird der Wert "Elektronik" den IDs 1 und 3 zugeordnet, während "Bücher" den IDs 2 und 5 zugeordnet wird.
So funktioniert der umgekehrte Index
Wenn Sie nach einem bestimmten Wert filtern (z. B. category == "electronics"), sucht Milvus einfach nach dem Begriff im Index und ruft die passenden IDs direkt ab. Dadurch wird das Scannen des gesamten Datensatzes vermieden und eine schnelle Filterung ermöglicht, insbesondere bei kategorischen oder sich wiederholenden Werten.
INVERTED-Indizes unterstützen alle skalaren Feldtypen, wie BOOL, INT8, INT16, INT32, INT64, FLOAT, DOUBLE, VARCHAR, JSON und ARRAY. Die Indexparameter für die Indizierung eines JSON-Feldes unterscheiden sich jedoch geringfügig von den regulären skalaren Feldern.
Erstellen von Indizes für Nicht-JSON-Felder
Um einen Index für ein Nicht-JSON-Feld zu erstellen, folgen Sie diesen Schritten:
Bereiten Sie Ihre Indexparameter vor:
from pymilvus import MilvusClient client = MilvusClient(uri="http://localhost:19530") # Replace with your server address # Create an empty index parameter object index_params = client.prepare_index_params()Fügen Sie den Index
INVERTEDhinzu:index_params.add_index( field_name="category", # Name of the field to index index_type="INVERTED", # Specify INVERTED index type index_name="category_index" # Give your index a name )Erstellen Sie den Index:
client.create_index( collection_name="my_collection", # Replace with your collection name index_params=index_params )
Erstellen von Indizes auf JSON-FeldernCompatible with Milvus 2.5.11+
Sie können auch INVERTED-Indizes auf bestimmten Pfaden innerhalb von JSON-Feldern erstellen. Dies erfordert zusätzliche Parameter, um den JSON-Pfad und den Datentyp anzugeben:
# Build index params
index_params.add_index(
field_name="metadata", # JSON field name
index_type="INVERTED",
index_name="metadata_category_index",
params={
"json_path": "metadata[\"category\"]", # Path to the JSON key
"json_cast_type": "varchar" # Data type to cast to during indexing
}
)
# Create index
client.create_index(
collection_name="my_collection", # Replace with your collection name
index_params=index_params
)
Ausführliche Informationen über die Indizierung von JSON-Feldern, einschließlich unterstützter Pfade, Datentypen und Einschränkungen, finden Sie unter JSON-Indizierung.
Einen Index löschen
Verwenden Sie die Methode drop_index(), um einen vorhandenen Index aus einer Sammlung zu entfernen.
In v2.6.3 oder früher müssen Sie die Auflistung freigeben, bevor Sie einen skalaren Index löschen können.
Ab v2.6.4 können Sie einen skalaren Index direkt löschen, sobald er nicht mehr benötigt wird - Sie müssen die Sammlung nicht mehr freigeben.
client.drop_index(
collection_name="my_collection", # Name of the collection
index_name="category_index" # Name of the index to drop
)
Bewährte Praktiken
Erstellen Sie Indizes nach dem Laden von Daten: Erstellen Sie Indizes auf Sammlungen, die bereits Daten enthalten, um die Leistung zu verbessern
Verwenden Sie beschreibende Indexnamen: Wählen Sie Namen, die das Feld und den Zweck klar angeben.
Überwachen Sie die Indexleistung: Überprüfen Sie die Abfrageleistung vor und nach der Erstellung von Indizes
Berücksichtigen Sie Ihre Abfragemuster: Erstellen Sie Indizes für Felder, nach denen Sie häufig filtern
Nächste Schritte
Erfahren Sie mehr über andere Indextypen
Siehe JSON-Indizierung für erweiterte JSON-Indizierungsszenarien