Construction de l'index vectoriel

Ce guide décrit comment construire un index vectoriel dans Milvus.

Un index vectoriel est une unité d'organisation de métadonnées utilisée pour accélérer la recherche de similarité vectorielle. Sans construire d'index sur les vecteurs, Milvus effectuera une recherche brute.

Par défaut, Milvus n'indexe pas les segments contenant moins de 1 024 lignes.

L'exemple suivant illustre la construction d'un index IVF_FLAT avec 1024 clusters en utilisant la distance euclidienne (L2). Vous pouvez choisir l'index et le type de métrique qui conviennent à votre scénario.

Préparer les paramètres de l'index

Suivez ces étapes pour préparer les paramètres de l'index :

index_params = {
  "metric_type":"L2",
  "index_type":"IVF_FLAT",
  "params":{"nlist":1024}
}
Paramètre Description Options
metric_type Le type de métrique utilisé pour mesurer la similarité vectorielle. Pour les vecteurs en virgule flottante : L2 (distance euclidienne)- IP (produit intérieur)- COSINE (similarité cosinus)Pour les vecteurs binaires : JACCARD (distance de Jaccard)- HAMMING (distance de Hamming)
index_type Le type d'index utilisé pour accélérer la recherche vectorielle. Pour les vecteurs en virgule flottante : 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)Pour les vecteurs binaires : BIN_FLAT (BIN_FLAT)- BIN_IVF_FLAT (BIN_IVF_FLAT)
params Paramètres de construction spécifiques pour l'index. Pour plus d'informations, voir l'indexation en mémoire et sur disque.
  • DISKANN a certaines exigences préalables. Pour plus d'informations, voir l'indexation sur disque.
  • GPU_IVF_FLAT et GPU_IVF_PQ sont uniquement disponibles dans les installations Milvus avec prise en charge GPU activée.

Construire l'index

Construisez l'index en spécifiant le nom du champ vectoriel et les paramètres de l'index.

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

utility.index_building_progress("book")
Paramètre Description
field_name Le nom du champ vectoriel sur lequel construire l'index.
index_params Les paramètres de l'index à construire.

Construction de l'index scalaire

Contrairement aux vecteurs, les scalaires n'ont qu'une magnitude et aucune direction. Milvus considère les nombres et les chaînes individuelles comme des scalaires. Voici la liste des types de données disponibles pour les champs scalaires dans Milvus.

À partir de Milvus v2.1.0, pour accélérer le filtrage des attributs dans les recherches hybrides, vous pouvez construire un index sur les champs scalaires. Vous pouvez en savoir plus sur l'indexation des champs scalaires ici.

Remarque : Le lien pour "ici" doit être remplacé par le lien réel spécifié dans le document original.

Construire un index

Lors de la construction d'un index sur un champ scalaire, vous n'avez pas besoin de définir des paramètres d'index. La valeur par défaut pour le nom de l'index du champ scalaire est default_idx, suivi du nom du champ indexé. Vous pouvez la définir sur d'autres valeurs appropriées si vous le souhaitez.

Le snippet de code suivant suppose qu'une collection nommée book existe déjà et qu'un index doit être créé sur le champ de chaîne book_name.

from pymilvus import Collection

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

Une fois l'index créé, vous pouvez inclure une expression booléenne pour ce champ de chaîne dans la recherche de similarité vectorielle, comme illustré ci-dessous :

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)

Supprimer l'index

from pymilvus import Collection
collection = Collection("book")      # Obtenir une collection existante.
collection.drop_index()