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()