• 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

INDICE SPARSE_INVERTITO

L'indice SPARSE_INVERTED_INDEX è un tipo di indice utilizzato da Milvus per memorizzare e cercare in modo efficiente vettori sparsi. Questo tipo di indice sfrutta i principi dell'indicizzazione invertita per creare una struttura di ricerca altamente efficiente per i dati sparsi. Per ulteriori informazioni, consultare INVERTED.

Creazione dell'indice

Per costruire un indice SPARSE_INVERTED_INDEX su un campo vettoriale rado in Milvus, utilizzare il metodo add_index(), specificando i parametri index_type, metric_type e ulteriori per l'indice.

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_sparse_vector_field_name", # Name of the vector field to be indexed
    index_type="SPARSE_INVERTED_INDEX", # Type of the index to create
    index_name="sparse_inverted_index", # Name of the index to create
    metric_type="IP", # Metric type used to measure similarity
    params={"inverted_index_algo": "DAAT_MAXSCORE"}, # Algorithm used for building and querying the index
)

In questa configurazione:

  • index_type: Il tipo di indice da costruire. In questo esempio, impostare il valore su SPARSE_INVERTED_INDEX.

  • metric_type: La metrica utilizzata per calcolare la somiglianza tra vettori sparsi. Valori validi:

    • IP (Prodotto interno): Misura la somiglianza utilizzando il prodotto di punti.

    • BM25: Utilizzata in genere per la ricerca full-text, che si concentra sulla somiglianza testuale.

      Per ulteriori dettagli, fare riferimento a Tipi di metriche e ricerca full-text.

  • params.inverted_index_algo: L'algoritmo usato per costruire e interrogare l'indice. Valori validi:

    • "DAAT_MAXSCORE" (predefinito): Elaborazione ottimizzata delle query Document-at-a-Time (DAAT) con l'algoritmo MaxScore. MaxScore fornisce prestazioni migliori per valori elevati di k o per query con molti termini, saltando termini e documenti che potrebbero avere un impatto minimo. Questo risultato si ottiene suddividendo i termini in gruppi essenziali e non essenziali in base ai punteggi di impatto massimo, concentrandosi sui termini che possono contribuire ai risultati top-k.

    • "DAAT_WAND": Elaborazione ottimizzata delle query DAAT con l'algoritmo WAND. WAND valuta un minor numero di documenti trovati, sfruttando i punteggi di impatto massimo per saltare i documenti non competitivi, ma ha un overhead più elevato per ogni singolo colpo. Questo rende WAND più efficiente per le query con valori k piccoli o per le query brevi, dove il salto è più fattibile.

    • "TAAT_NAIVE": Elaborazione di query Basic Term-at-a-Time (TAAT). Pur essendo più lento rispetto a DAAT_MAXSCORE e DAAT_WAND, TAAT_NAIVE offre un vantaggio unico. A differenza degli algoritmi DAAT, che utilizzano punteggi di impatto massimo memorizzati nella cache che rimangono statici indipendentemente dalle modifiche al parametro di raccolta globale (avgdl), TAAT_NAIVE si adatta dinamicamente a tali modifiche.

    Per conoscere i parametri di costruzione disponibili per l'indice SPARSE_INVERTED_INDEX, consultare la sezione Parametri di costruzione dell'indice.

Una volta configurati i parametri dell'indice, è possibile creare l'indice utilizzando direttamente il metodo create_index() o passando i parametri dell'indice al metodo create_collection. Per i dettagli, fare riferimento a Creare una raccolta.

Ricerca nell'indice

Una volta creato l'indice e inserite le entità, è possibile eseguire ricerche di similarità sull'indice.

# Prepare the query vector
query_vector = [{1: 0.2, 50: 0.4, 1000: 0.7}]

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    anns_field="vector_field",  # Vector field name
    data=query_vector,  # Query vector
    limit=3,  # TopK results to return
)

Per conoscere i parametri di ricerca disponibili per l'indice SPARSE_INVERTED_INDEX, fare riferimento a Parametri di ricerca specifici dell'indice.

Parametri dell'indice

Questa sezione fornisce una panoramica dei parametri utilizzati per la costruzione di un indice e per l'esecuzione di ricerche sull'indice.

Parametri di costruzione dell'indice

La tabella seguente elenca i parametri che possono essere configurati in params quando si costruisce un indice.

Parametro

Descrizione

Valore Intervallo

Suggerimento per la messa a punto

inverted_index_algo

L'algoritmo usato per costruire e interrogare l'indice. Determina il modo in cui l'indice elabora le query.

"DAAT_MAXSCORE" (predefinito), "DAAT_WAND", "TAAT_NAIVE"

Utilizzare "DAAT_MAXSCORE" per scenari con valori k elevati o query con molti termini, che possono beneficiare del salto di documenti non competitivi.

Scegliere "DAAT_WAND" per query con valori k piccoli o brevi, per sfruttare un salto più efficiente.

Usare "TAAT_NAIVE" se è necessario un adattamento dinamico alle modifiche della collezione (ad esempio, avgdl).

Parametri di ricerca specifici per l'indice

La tabella seguente elenca i parametri che possono essere configurati in search_params.params per la ricerca nell'indice.

Parametro

Descrizione

Valore Intervallo

Suggerimento di sintonizzazione

drop_ratio_search

Percentuale dei valori più piccoli da ignorare durante la ricerca, per ridurre il rumore.

Frazione compresa tra 0,0 e 1,0 (ad esempio, 0,2 ignora il 20% dei valori più piccoli).

Questo parametro può essere regolato in base alla spazialità e al livello di rumore dei vettori della query.

Questo parametro controlla la proporzione di valori di bassa grandezza abbandonati durante la ricerca. Aumentando questo valore (ad esempio, a 0.2) si può ridurre il rumore e concentrare la ricerca sui componenti più significativi, migliorando la precisione e l'efficienza. Tuttavia, l'eliminazione di un maggior numero di valori può anche ridurre il richiamo, escludendo segnali potenzialmente rilevanti. Scegliere un valore che bilanci il richiamo e la precisione per il proprio carico di lavoro.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Questa pagina è stata utile?