INVERTITO
Quando è necessario eseguire frequenti query di filtro sui dati, gli indici INVERTED possono migliorare notevolmente le prestazioni delle query. Invece di scorrere tutti i documenti, Milvus utilizza gli indici invertiti per individuare rapidamente i record esatti che corrispondono alle condizioni del filtro.
Quando usare gli indici INVERTITI
Usare gli indici invertiti quando è necessario:
Filtrare per valori specifici: Trovare tutti i record in cui un campo è uguale a un valore specifico (ad esempio,
category == "electronics").Filtrare il contenuto del testo: Eseguire ricerche efficienti sui campi
VARCHARInterrogare i valori dei campi JSON: Filtrare su chiavi specifiche all'interno di strutture JSON
Vantaggi in termini di prestazioni: gli indici INVERTED possono ridurre il tempo di interrogazione da secondi a millisecondi su grandi insiemi di dati, eliminando la necessità di eseguire scansioni dell'intero insieme.
Come funzionano gli indici INVERTED
Un indice INVERTED in Milvus mappa ogni valore univoco del campo (termine) all'insieme degli ID dei documenti in cui si trova quel valore. Questa struttura consente di effettuare ricerche rapide per campi con valori ripetuti o categorici.
Come mostrato nel diagramma, il processo funziona in due fasi:
Mappatura in avanti (ID → Termine): Ogni ID del documento punta al valore del campo che contiene.
Mappatura inversa (Termine → ID): Milvus raccoglie i termini unici e costruisce una mappatura inversa da ogni termine a tutti gli ID che lo contengono.
Per esempio, il valore "elettronica" corrisponde agli ID 1 e 3, mentre "libri" corrisponde agli ID 2 e 5.
Come funziona l'indice inverso
Quando si filtra per un valore specifico (ad esempio, category == "electronics"), Milvus cerca semplicemente il termine nell'indice e recupera direttamente gli ID corrispondenti. Questo evita la scansione dell'intero set di dati e consente un filtraggio rapido, soprattutto per i valori categorici o ripetuti.
Gli indici INVERTED supportano tutti i tipi di campi scalari, come BOOL, INT8, INT16, INT32, INT64, FLOAT, DOUBLE, VARCHAR, JSON e ARRAY. Tuttavia, i parametri dell'indice per indicizzare un campo JSON sono leggermente diversi dai normali campi scalari.
Creare indici su campi non JSON
Per creare un indice su un campo non JSON, procedere come segue:
Preparare i parametri dell'indice:
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()Aggiungere l'indice
INVERTED: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 )Creare l'indice:
client.create_index( collection_name="my_collection", # Replace with your collection name index_params=index_params )
Creare indici su campi JSONCompatible with Milvus 2.5.11+
È anche possibile creare indici INVERTED su percorsi specifici all'interno di campi JSON. Ciò richiede parametri aggiuntivi per specificare il percorso JSON e il tipo di dati:
# 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
)
Per informazioni dettagliate sull'indicizzazione dei campi JSON, compresi i percorsi supportati, i tipi di dati e le limitazioni, consultare Indicizzazione JSON.
Eliminare un indice
Usare il metodo drop_index() per rimuovere un indice esistente da una collezione.
Nella versione 2.6.3 o precedente, è necessario rilasciare la collezione prima di eliminare un indice scalare.
Dalla versione 2.6.4 o successiva, è possibile eliminare direttamente un indice scalare quando non è più necessario, senza dover prima rilasciare l'insieme.
client.drop_index(
collection_name="my_collection", # Name of the collection
index_name="category_index" # Name of the index to drop
)
Le migliori pratiche
Creare gli indici dopo il caricamento dei dati: Creare indici su raccolte che contengono già dati per ottenere prestazioni migliori.
Utilizzare nomi di indici descrittivi: Scegliere nomi che indichino chiaramente il campo e lo scopo
Monitorare le prestazioni degli indici: Verificare le prestazioni delle query prima e dopo la creazione degli indici.
Considerare i modelli di query: Creare indici sui campi per i quali si filtra frequentemente
Passi successivi
Conoscere altri tipi di indici
Vedere Indicizzazione JSON per scenari di indicizzazione JSON avanzati