• Sobre Milvus
  • Começar a trabalhar
  • Conceitos
  • Guia do utilizador
    • Colecções
    • Esquema e campos de dados
    • Inserir e apagar
    • Índices
    • Pesquisar
    • Embeddings e Reranking
    • Otimização do armazenamento
  • Importação de dados
  • Ferramentas de IA
  • Guia de Administração
  • Ferramentas
  • Integrações
  • Tutoriais
  • FAQs
  • API Reference

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 VARCHAR

  • Consultar 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:

  1. Mapeamento direto (ID → Termo): Cada ID de documento aponta para o valor do campo que contém.

  2. 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.

How Inverted Index Works 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:

  1. 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()
    
  2. 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
    )
    
  3. 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