Construyendo un índice de vectores
Esta guía describe cómo construir un índice de vectores en Milvus.
Un índice de vectores es una unidad de organización de metadatos utilizada para acelerar la búsqueda de similitud de vectores. Sin construir un índice en los vectores, Milvus realizará una búsqueda de fuerza bruta.
Por defecto, Milvus no indexa segmentos con menos de 1,024 filas.
El siguiente ejemplo ilustra la construcción de un índice IVF_FLAT con 1024 clústeres utilizando la distancia euclidiana (L2). Puedes elegir el tipo de índice y métrica que se adapte a tu escenario.
Preparar Parámetros del Índice
Sigue estos pasos para preparar los parámetros del índice:
index_params = {
"metric_type":"L2",
"index_type":"IVF_FLAT",
"params":{"nlist":1024}
}
Parámetro | Descripción | Opciones |
---|---|---|
metric_type |
El tipo de métrica utilizada para medir la similitud de vectores. | Para vectores de punto flotante:- L2 (distancia euclidiana)- IP (producto interior)- COSINE (similitud coseno)Para vectores binarios:- JACCARD (distancia de Jaccard)- HAMMING (distancia de Hamming) |
index_type |
El tipo de índice utilizado para acelerar la búsqueda de vectores. | Para vectores de punto flotante:- 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)Para vectores binarios:- BIN_FLAT (BIN_FLAT)- BIN_IVF_FLAT (BIN_IVF_FLAT) |
params |
Parámetros específicos de construcción para el índice. | Para más información, consulta el Indexado en Memoria y en Disco. |
- DISKANN tiene ciertos requisitos previos. Para más información, consulta el Indexado en Disco.
- GPU_IVF_FLAT y GPU_IVF_PQ solo están disponibles en instalaciones de Milvus con soporte para GPU habilitado.
Construir Índice
Construye el índice especificando el nombre del campo de vector y los parámetros del índice.
from pymilvus import Collection, utility
collection = Collection("book")
collection.create_index(
field_name="book_intro",
index_params=index_params
)
utility.index_building_progress("book")
Parámetro | Descripción |
---|---|
field_name |
El nombre del campo de vector en el que construir el índice. |
index_params |
Los parámetros del índice que se van a construir. |
Construyendo un Índice Escalar
A diferencia de los vectores, los escalares solo tienen magnitud y no tienen dirección. Milvus considera los números y las cadenas individuales como escalares. A continuación se muestra la lista de tipos de datos disponibles para campos escalares en Milvus.
A partir de Milvus v2.1.0, para acelerar la filtración de atributos en búsquedas híbridas, puedes construir un índice en campos escalares. Puedes leer más sobre el indexado de campos escalares aquí.
Nota: El enlace para "aquí" debe reemplazarse por el enlace real especificado en el documento original.
Construir Índice
Al construir un índice en un campo escalar, no necesitas establecer ningún parámetro de índice. El valor por defecto para el nombre del índice del campo escalar es default_idx
, seguido por el nombre del campo indexado. Puedes establecerlo a otros valores apropiados si lo deseas.
El siguiente fragmento de código asume que ya existe una colección llamada book
y que se necesita crear un índice en el campo de cadena book_name
.
from pymilvus import Collection
collection = Collection("book")
collection.create_index(
field_name="book_name",
index_name="scalar_index",
)
collection.load()
Una vez creado el índice, puedes incluir una expresión booleana para este campo de cadena en la búsqueda de similitud de vectores, como se muestra a continuación:
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)
Eliminar Índice
from pymilvus import Collection
collection = Collection("book") # Obtener una colección existente.
collection.drop_index()