INVERTIDO
Quando é necessário efetuar consultas de filtragem frequentes nos seus dados, os índices INVERTED podem melhorar drasticamente o desempenho da consulta. Em vez de percorrer todos os documentos, o Milvus utiliza índices invertidos para localizar rapidamente os registos exactos que correspondem às suas condições de filtragem.
Quando utilizar índices INVERTED
Utilize os índices INVERTED quando precisar de:
Filtrar por valores específicos: Encontrar todos os registos em que um campo é igual a um valor específico (por exemplo,
category == "electronics")Filtrar conteúdo de texto: Efetuar pesquisas eficientes em campos
VARCHARConsultar valores de campo JSON: Filtrar em chaves específicas dentro de estruturas JSON
Benefício de desempenho: os índices INVERTED podem reduzir o tempo de consulta de segundos para milissegundos em grandes conjuntos de dados, eliminando a necessidade de varreduras de coleções completas.
Como funcionam os índices INVERTED
Um índice INVERTED no Milvus mapeia cada valor de campo único (termo) para o conjunto de IDs de documentos onde esse valor ocorre. Esta estrutura permite pesquisas rápidas para campos com valores repetidos ou categóricos.
Como mostra o diagrama, o processo funciona em duas etapas:
Mapeamento direto (ID → Termo): Cada ID de documento aponta para o valor do campo que contém.
Mapeamento invertido (Termo → IDs): O Milvus recolhe termos únicos e constrói um mapeamento invertido de cada termo para todos os IDs que o contêm.
Por exemplo, o valor "electronics" mapeia para os IDs 1 e 3, enquanto "books" mapeia para os IDs 2 e 5.
Como funciona o Índice Invertido
Quando filtra por um valor específico (por exemplo, category == "electronics"), o Milvus procura simplesmente o termo no índice e recupera diretamente os IDs correspondentes. Isto evita a pesquisa de todo o conjunto de dados e permite uma filtragem rápida, especialmente para valores categóricos ou repetidos.
Os índices INVERTED suportam todos os tipos de campos escalares, como BOOL, INT8, INT16, INT32, INT64, FLOAT, DOUBLE, VARCHAR, JSON e ARRAY. No entanto, os parâmetros de índice para indexar um campo JSON são ligeiramente diferentes dos campos escalares normais.
Criar índices em campos não JSON
Para criar um índice num campo não JSON, siga estes passos:
Prepare os parâmetros do í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()Adicione o í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 )Criar o índice:
client.create_index( collection_name="my_collection", # Replace with your collection name index_params=index_params )
Criar índices em campos JSONCompatible with Milvus 2.5.11+
Também pode criar índices INVERTED em caminhos específicos dentro de campos JSON. Isto requer parâmetros adicionais para especificar o caminho JSON e o tipo de dados:
# 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 obter informações detalhadas sobre a indexação de campos JSON, incluindo caminhos suportados, tipos de dados e limitações, consulte Indexação JSON.
Remover um índice
Utilize o método drop_index() para remover um índice existente de uma coleção.
Na versão 2.6.3 ou anterior, é necessário libertar a coleção antes de eliminar um índice escalar.
A partir da v2.6.4 ou posterior, pode eliminar um índice escalar diretamente quando este já não for necessário, sem necessidade de libertar primeiro a coleção.
client.drop_index(
collection_name="my_collection", # Name of the collection
index_name="category_index" # Name of the index to drop
)
Melhores práticas
Crie índices depois de carregar os dados: Crie índices em colecções que já contenham dados para um melhor desempenho
Use nomes de índice descritivos: Escolha nomes que indiquem claramente o campo e a finalidade
Monitorizar o desempenho do índice: Verifique o desempenho da consulta antes e depois de criar índices
Considere os seus padrões de consulta: Crie índices nos campos pelos quais filtra frequentemente
Próximos passos
Saiba mais sobre outros tipos de índice
Consulte Indexação JSON para cenários avançados de indexação JSON