• Informazioni su Milvus
  • Iniziare
  • Concetti
  • Guida per l'utente
    • Collezioni
    • Schema e campi dati
    • Inserisci e cancella
    • Indici
    • Ricerca
    • Incorporazione e riclassificazione
    • Ottimizzazione dello stoccaggio
  • Importazione dei dati
  • Strumenti AI
  • Guida all'amministrazione
  • Strumenti
  • Integrazioni
  • Tutorial
  • Domande frequenti
  • API Reference

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 VARCHAR

  • Interrogare 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:

  1. Mappatura in avanti (ID → Termine): Ogni ID del documento punta al valore del campo che contiene.

  2. 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.

How Inverted Index Works 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:

  1. 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()
    
  2. 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
    )
    
  3. 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