Costruzione dell'Indice Vettoriale

Questa guida descrive come costruire un indice vettoriale in Milvus.

Un indice vettoriale è un'unità di organizzazione dei metadati utilizzata per accelerare la ricerca di similarità vettoriale. Senza costruire un indice sui vettori, Milvus eseguirà una ricerca forzata.

Per impostazione predefinita, Milvus non indicizza segmenti con meno di 1.024 righe.

L'esempio seguente illustra la costruzione di un indice IVF_FLAT con 1024 cluster utilizzando la distanza euclidea (L2). È possibile scegliere l'indice e il tipo di metrica che si adattano allo scenario.

Preparare i Parametri dell'Indice

Seguire questi passaggi per preparare i parametri dell'indice:

index_params = {
  "metric_type": "L2",
  "index_type": "IVF_FLAT",
  "params": {"nlist": 1024}
}
Parametro Descrizione Opzioni
metric_type Il tipo di metrica utilizzato per misurare la similarità vettoriale. Per vettori a virgola mobile: - L2 (distanza euclidea) - IP (prodotto interno) - COSINE (similarità del coseno) Per vettori binari: - JACCARD (distanza di Jaccard) - HAMMING (distanza di Hamming)
index_type Il tipo di indice utilizzato per accelerare la ricerca vettoriale. Per vettori a virgola mobile: - 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) Per vettori binari: - BIN_FLAT (BIN_FLAT) - BIN_IVF_FLAT (BIN_IVF_FLAT)
params Parametri specifici per la costruzione dell'indice. Per ulteriori informazioni, consultare l'indicizzazione in memoria e su disco.
  • DISKANN ha determinati requisiti preliminari. Per ulteriori informazioni, consultare l'indicizzazione su disco.
  • GPU_IVF_FLAT e GPU_IVF_PQ sono disponibili solo nelle installazioni di Milvus con supporto GPU abilitato.

Costruire l'Indice

Costruire l'indice specificando il nome del campo vettoriale e i parametri dell'indice.

from pymilvus import Collection, utility
collection = Collection("book")
collection.create_index(
  field_name="book_intro",
  index_params=index_params
)

utility.index_building_progress("book")
Parametro Descrizione
field_name Il nome del campo vettoriale su cui costruire l'indice.
index_params I parametri dell'indice da costruire.

Costruzione dell'Indice Scalare

A differenza dei vettori, gli scalari hanno solo magnitudine e nessuna direzione. Milvus considera singoli numeri e stringhe come scalari. Di seguito è riportato l'elenco dei tipi di dati disponibili per i campi scalari in Milvus.

A partire da Milvus v2.1.0, per accelerare il filtraggio degli attributi nelle ricerche ibride, è possibile costruire un indice sui campi scalari. È possibile leggere ulteriori informazioni sull'indicizzazione dei campi scalari qui.

Nota: Il collegamento per "qui" dovrebbe essere sostituito con il collegamento effettivo specificato nel documento originale.

Costruzione dell'Indice

Nel caso della costruzione di un indice su un campo scalare, non è necessario impostare alcun parametro dell'indice. Il valore predefinito per il nome dell'indice del campo scalare è default_idx, seguito dal nome del campo indicizzato. È possibile impostarlo su altri valori appropriati se necessario.

Il seguente esempio di codice presume che esista già una collezione chiamata book e che sia necessario creare un indice sul campo di stringhe book_name.

from pymilvus import Collection

collection = Collection("book")   
collection.create_index(
  field_name="book_name", 
  index_name="scalar_index",
)
collection.load()

Una volta creato l'indice, è possibile includere un'espressione booleana per questo campo di stringhe nella ricerca di similarità vettoriale, come mostrato di seguito:

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)

Eliminare l'Indice

from pymilvus import Collection
collection = Collection("book")      # Ottenere una collezione esistente.
collection.drop_index()