O mecanismo de vetores do Alibaba Cloud Elasticsearch permite executar buscas de similaridade vetorial em grande escala junto com pesquisas de texto completo em um único cluster. Utilize-o para criar sistemas de recomendação, pipelines de recuperação de imagens e aplicações de processamento de linguagem natural.
O mecanismo de vetores armazena índices HNSW na memória off-heap. Antes de selecionar a especificação e a quantidade de nós de dados, estime o uso de memória off-heap seguindo as orientações de cálculo de memória apresentadas mais adiante neste tópico.
O mecanismo de vetores recebe atualizações regularmente. Utilize a versão mais recente do Alibaba Cloud Elasticsearch 8.x para obter o melhor desempenho e custo-benefício.
Pré-requisitos
Antes de começar, verifique se você possui:
Uma instância do Alibaba Cloud Elasticsearch 8.x em execução. Caso ainda não tenha criado uma, siga o guia Início rápido: Da criação da instância à recuperação de dados para provisioná-la.
O mecanismo de vetores utiliza grandes quantidades de memória off-heap para armazenar índices vetoriais em cache. Para escolher a especificação e a quantidade adequadas de nós de dados, estime o consumo de memória off-heap conforme as diretrizes de cálculo descritas posteriormente neste tópico.
Escolha um método de busca
Antes de criar um índice, determine qual método de busca kNN melhor atende ao seu caso de uso:
|
Método |
Funcionamento |
Mais indicado para |
|
kNN aproximado |
Emprega a cláusula |
A maioria das cargas de trabalho em produção |
|
kNN exato |
Executa uma consulta |
Conjuntos de dados pequenos ou cenários que exigem pontuação precisa |
O kNN aproximado proporciona baixa latência e boa precisão. Já o kNN exato garante resultados totalmente precisos, mas não escala adequadamente para grandes volumes de dados.
Etapa 1: Crie um índice
Crie um índice contendo um campo dense_vector para armazenar os dados vetoriais:
PUT /my_vector_index
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"my_vector": {
"type": "dense_vector",
"dims": 3
},
"my_text": {
"type": "keyword"
}
}
}
}
Pontos importantes:
Defina
dimscomo a dimensão de saída do seu modelo de embedding. Todos os documentos no índice devem utilizar a mesma dimensão.Determine os valores de
number_of_shardsenumber_of_replicasconsiderando o volume de dados e os requisitos de desempenho.O tipo
dense_vectoraceita parâmetros adicionais, como métricas de similaridade e opções de indexação. Consulte Tipo de campo Dense vector para acessar a lista completa.
Etapa 2: Indexe documentos
Adicione documentos por meio da Bulk API ou de requisições individuais de indexação. O vetor de cada documento deve corresponder ao valor de dims definido no mapeamento:
PUT my_vector_index/_doc/1
{
"my_text": "text1",
"my_vector": [0.5, 10, 6]
}
PUT my_vector_index/_doc/2
{
"my_text": "text2",
"my_vector": [-0.5, 10, 10]
}
Se a dimensão do vetor de um documento não coincidir com o valor de dims no mapeamento, o Elasticsearch rejeitará o documento e retornará um erro.
Etapa 3: Execute uma busca kNN
kNN aproximado (recomendado)
Envie uma consulta kNN especificando o vetor de busca e a quantidade de resultados desejada:
GET my_vector_index/_search
{
"knn": {
"field": "my_vector",
"query_vector": [-5, 9, -12],
"k": 10,
"num_candidates": 100
},
"fields": ["my_text"]
}
| Parâmetro | Descrição |
|---|---|
k |
Quantidade de vizinhos mais próximos a serem retornados. Deve ser menor ou igual a num_candidates. Assume por padrão o valor de size. |
num_candidates |
Número de candidatos a vizinhos mais próximos coletados por shard antes da mesclagem dos resultados. Precisa ser maior que k e menor ou igual a 10.000. O valor padrão é Math.min(1.5 * k, 10000). Valores maiores aumentam o recall, porém elevam a latência. |
No contexto do algoritmo HNSW,num_candidatescorresponde ao valor deef(fator de exploração) durante a consulta — ele define quantos documentos candidatos cada shard examina antes de devolver seus principais resultados.krepresenta a quantidade final de documentos retornados após a consolidação de todos os shards.
kNN exato
Utilize uma consulta script_score combinada com uma função vetorial para realizar pontuação por força bruta. Essa abordagem percorre todos os documentos do índice e não é adequada para grandes conjuntos de dados.
Recursos adicionais de busca kNN
A cláusula knn oferece suporte aos seguintes recursos:
|
Recurso |
Descrição |
|
Filtragem |
Inclua uma cláusula |
|
Limiar de pontuação mínima |
Aplique o parâmetro |
|
Campos aninhados |
Realize buscas kNN sobre vetores armazenados em campos |
|
kNN multicampo |
Consulte vários campos |
|
Repontuação |
Reordene os resultados do kNN aproximado utilizando um rescore via |
Para consultar a referência completa de recursos, acesse Busca k-nearest neighbor (kNN).
Considerações para produção
Planejamento de memória
O mecanismo de vetores mantém os índices HNSW na memória off-heap. Subestimar essa memória provoca evições e prejudica a latência das buscas. Dimensione corretamente seus nós de dados antes de implantar em produção, seguindo as orientações de cálculo de memória disponíveis neste tópico.
Ajuste de num_candidates
Comece com o valor padrão (Math.min(1.5 * k, 10000)). Se o recall estiver abaixo da meta esperada, aumente num_candidates gradualmente. Valores mais altos melhoram o recall, mas também elevam o custo de desempenho.
Planejamento de shards
Configure number_of_shards e number_of_replicas levando em conta o volume de dados previsto, o throughput de consultas e os requisitos de disponibilidade.
Consistência de dimensões
Defina dims exatamente como a dimensão de saída do seu modelo de embedding. Divergências de dimensão geram erros durante a indexação.
Mantenha o Elasticsearch atualizado
O mecanismo de vetores recebe melhorias contínuas de desempenho e eficiência de custos. Execute sempre a versão mais recente do Alibaba Cloud Elasticsearch 8.x para aproveitar essas otimizações.