Construção do Índice de Vetores

Este guia descreve como construir um índice de vetores no Milvus.

Um índice de vetores é uma unidade de organização de metadados usada para acelerar a busca de similaridade de vetores. Sem a construção de um índice nos vetores, o Milvus realizará uma busca de força bruta.

Por padrão, o Milvus não indexa segmentos com menos de 1.024 linhas.

O exemplo a seguir ilustra a construção de um índice IVF_FLAT com 1024 clusters usando a distância Euclidiana (L2). Você pode escolher o tipo de índice e métrica que se adequem ao seu cenário.

Preparar Parâmetros do Índice

Siga estas etapas para preparar os parâmetros do índice:

index_params = {
  "metric_type":"L2",
  "index_type":"IVF_FLAT",
  "params":{"nlist":1024}
}
Parâmetro Descrição Opções
metric_type O tipo de métrica usada para medir a similaridade de vetores. Para vetores de ponto flutuante:- L2 (distância euclidiana)- IP (produto interno)- COSINE (similaridade cosseno)Para vetores binários:- JACCARD (distância de Jaccard)- HAMMING (distância de Hamming)
index_type O tipo de índice usado para acelerar a busca de vetores. Para vetores de ponto flutuante:- 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 vetores binários:- BIN_FLAT (BIN_FLAT)- BIN_IVF_FLAT (BIN_IVF_FLAT)
params Parâmetros específicos de construção para o índice. Para mais informações, consulte Indexação em Memória e em Disco.
  • DISKANN tem certos pré-requisitos. Para mais informações, consulte Indexação em Disco.
  • GPU_IVF_FLAT e GPU_IVF_PQ estão disponíveis apenas em instalações do Milvus com suporte para GPU habilitado.

Construir Índice

Construa o índice especificando o nome do campo de vetor e os parâmetros do í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 Descrição
field_name O nome do campo de vetor no qual construir o índice.
index_params Os parâmetros do índice a ser construído.

Construção do Índice Escalar

Ao contrário de vetores, escalares têm apenas magnitude e nenhuma direção. O Milvus considera números e strings individuais como escalares. Abaixo está a lista de tipos de dados disponíveis para campos escalares no Milvus.

Começando do Milvus v2.1.0, para acelerar a filtragem de atributos em buscas híbridas, você pode construir um índice em campos escalares. Você pode ler mais sobre indexação de campo escalar aqui.

Nota: O link para "aqui" deve ser substituído pelo link real especificado no documento original.

Construção de Índice

Ao construir um índice em um campo escalar, você não precisa definir nenhum parâmetro do índice. O valor padrão para o nome do índice do campo escalar é default_idx, seguido pelo nome do campo indexado. Você pode defini-lo para outros valores apropriados, se desejar.

O trecho de código a seguir pressupõe que uma coleção chamada book já exista e um índice precisa ser criado no campo de string book_name.

from pymilvus import Collection

collection = Collection("book")   
collection.create_index(
  field_name="book_name", 
  index_name="scalar_index",
)
collection.load()

Depois que o índice é criado, você pode incluir uma expressão booleana para este campo de string na busca de similaridade de vetores, como mostrado abaixo:

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)

Excluir Índice

from pymilvus import Collection
collection = Collection("book")      # Obter uma coleção existente.
collection.drop_index()