Índices vetoriais usam esquemas e algoritmos avançados, como Inverted File (IVF) e Hierarchical Navigable Small World (HNSW), para compactar o espaço vetorial e localizar os pontos de dados mais semelhantes em grandes conjuntos de dados. A criação de índices em campos vetoriais melhora significativamente as taxas de recall e a velocidade de resposta em aplicações como reconhecimento de imagem, recuperação de voz e sistemas de recomendação.
Informações básicas
O Milvus oferece suporte a diversos tipos de índice para recuperação eficiente por similaridade e disponibiliza três métricas de distância: Similaridade de Cosseno (COSINE), Distância Euclidiana (L2) e Produto Interno (IP). Para otimizar o desempenho da recuperação, crie índices nos campos vetoriais e escalares consultados com frequência.
Pré-requisitos
Preparação
Antes de gerenciar índices, crie uma coleção. Há duas abordagens:
Opção 1: Crie uma coleção com índices
Para criar e carregar um índice junto com a coleção:
Especifique a dimensão do campo vetorial (
dimension)Forneça os parâmetros relacionados ao índice (incluindo
metric_typee a configuração do índice)
Opção 2: Crie uma coleção sem índice
O trecho de código a seguir adota essa abordagem. A coleção criada não contém índice e não é carregada automaticamente na memória:
from pymilvus import MilvusClient, DataType
client = MilvusClient(
uri="http://c-xxxx.milvus.aliyuncs.com:19530", # The public endpoint of the Milvus instance.
token="<yourUsername>:<yourPassword>", # The username and password for the Milvus instance.
db_name="default" # The name of the database to connect to. This example uses the default database.
)
schema = MilvusClient.create_schema(
auto_id=False,
enable_dynamic_field=True,
)
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vec", datatype=DataType.FLOAT_VECTOR, dim=5)
client.create_collection(
collection_name="<yourCollectionName>",
schema=schema,
)
Crie um índice
Para criar um índice, chame a função create_index e passe os index_params definidos.
index_params = MilvusClient.prepare_index_params()
# Define the index parameters.
index_params.add_index(
field_name="vec", # Specify the vector field name, such as "vec".
metric_type="L2", # Set the metric type, such as L2.
index_type="IVF_PQ", # Set the index type, such as IVF_PQ.
index_name="vector_index" # Set the index name as needed.
)
# Create the index.
client.create_index(
collection_name="<yourCollectionName>",
index_params=index_params
)
Visualize índice
res = client.describe_index(
collection_name="<yourCollectionName>",
index_name="<yourIndexName>"
)
print(res)
Exclua um índice
client.drop_index(
collection_name="<yourCollectionName>",
index_name="<yourIndexName>"
)