INVERTIDO
Cuando necesite realizar frecuentes consultas de filtrado en sus datos, los índices INVERTED pueden mejorar drásticamente el rendimiento de las consultas. En lugar de explorar todos los documentos, Milvus utiliza índices invertidos para localizar rápidamente los registros exactos que coinciden con sus condiciones de filtrado.
Cuándo utilizar índices INVERTIDOS
Utilice los índices INVERTIDOS cuando necesite
Filtrar por valores específicos: Encontrar todos los registros en los que un campo es igual a un valor específico (por ejemplo,
category == "electronics")Filtrar contenido de texto: Realizar búsquedas eficaces en los campos de
VARCHARConsultar valores de campo JSON: Filtro de claves específicas dentro de estructuras JSON
Ventaja de rendimiento: los índices INVERTIDOS pueden reducir el tiempo de consulta de segundos a milisegundos en grandes conjuntos de datos al eliminar la necesidad de escanear toda la colección.
Cómo funcionan los índices INVERTIDOS
Un índice INVERTIDO en Milvus asigna cada valor de campo único (término) al conjunto de ID de documentos en los que aparece ese valor. Esta estructura permite realizar búsquedas rápidas de campos con valores repetidos o categóricos.
Como se muestra en el diagrama, el proceso funciona en dos pasos:
Asignación directa (ID → Término): Cada ID de documento apunta al valor del campo que contiene.
Mapeo inverso (Término → ID): Milvus recopila términos únicos y construye un mapeo inverso desde cada término a todos los IDs que lo contienen.
Por ejemplo, el valor "electrónica" corresponde a los ID 1 y 3, mientras que "libros" corresponde a los ID 2 y 5.
Cómo funciona el índice invertido
Cuando se filtra un valor específico (por ejemplo, category == "electronics"), Milvus simplemente busca el término en el índice y recupera directamente los ID coincidentes. Esto evita tener que escanear el conjunto de datos completo y permite un filtrado rápido, especialmente para valores categóricos o repetidos.
Los índices INVERTED admiten todos los tipos de campos escalares, como BOOL, INT8, INT16, INT32, INT64, FLOAT, DOUBLE, VARCHAR, JSON y ARRAY. Sin embargo, los parámetros de índice para indexar un campo JSON son ligeramente diferentes a los de los campos escalares normales.
Creación de índices en campos no JSON
Para crear un índice en un campo no JSON, siga estos pasos:
Prepare los parámetros del índice:
from pymilvus import MilvusClient client = MilvusClient(uri="http://localhost:19530") # Replace with your server address # Create an empty index parameter object index_params = client.prepare_index_params()Añada el índice
INVERTED:index_params.add_index( field_name="category", # Name of the field to index index_type="INVERTED", # Specify INVERTED index type index_name="category_index" # Give your index a name )Crear el índice:
client.create_index( collection_name="my_collection", # Replace with your collection name index_params=index_params )
Crear índices sobre campos JSONCompatible with Milvus 2.5.11+
También puede crear índices INVERTIDOS en rutas específicas dentro de campos JSON. Esto requiere parámetros adicionales para especificar la ruta JSON y el tipo de datos:
# Build index params
index_params.add_index(
field_name="metadata", # JSON field name
index_type="INVERTED",
index_name="metadata_category_index",
params={
"json_path": "metadata[\"category\"]", # Path to the JSON key
"json_cast_type": "varchar" # Data type to cast to during indexing
}
)
# Create index
client.create_index(
collection_name="my_collection", # Replace with your collection name
index_params=index_params
)
Para obtener información detallada sobre la indexación de campos JSON, incluidas las rutas admitidas, los tipos de datos y las limitaciones, consulte Indexación JSON.
Eliminar un índice
Utilice el método drop_index() para eliminar un índice existente de una colección.
En v2.6.3 o versiones anteriores, debes liberar la colección antes de eliminar un índice escalar.
A partir de la versión 2.6.4, puedes eliminar un índice escalar directamente cuando ya no sea necesario, sin necesidad de liberar primero la colección.
client.drop_index(
collection_name="my_collection", # Name of the collection
index_name="category_index" # Name of the index to drop
)
Prácticas recomendadas
Creeíndices después de cargar los datos: Cree índices en colecciones que ya contengan datos para mejorar el rendimiento.
Utilice nombres de índices descriptivos: Elija nombres que indiquen claramente el campo y el propósito
Supervisar el rendimiento de los índices: Compruebe el rendimiento de las consultas antes y después de crear índices
Tenga en cuenta sus patrones de consulta: Cree índices en los campos por los que filtra con frecuencia
Pasos siguientes
Más información sobre otros tipos de índices
Consulte Indexación JSON para conocer escenarios avanzados de indexación JSON