Página inicial do Docs → Iniciar e gerenciar o MongoDB → MongoDB Atlas
knnBeta
Nesta página
Definição
knnBeta
O
knnBeta
operador utiliza Mundos Pequenos Hierárquicos Navegáveis algoritmo para realizar a pesquisa semântica. Você pode usar o suporte do Atlas Search para a querykNN para procurar de forma semelhante um produto selecionado, procurar imagens e etc.
Sintaxe
knnBeta
tem a seguinte sintaxe:
1 { 2 $search: { 3 "index": "<index name>", // optional, defaults to "default" 4 "knnBeta": { 5 "vector": [<array-of-numbers>], 6 "path": "<field-to-search>", 7 "filter": {<filter-specification>}, 8 "k": <number>, 9 "score": {<options>} 10 } 11 } 12 }
Opções
Campo | Tipo | Descrição | necessidade |
---|---|---|---|
filter | documento | Qualquer operador do Atlas Search para filtrar os documentos com base em metadados ou determinados critérios de pesquisa, que podem ajudar a reduzir o escopo da pesquisa vetorial. | Opcional |
k | número | Número de vizinhos mais próximos a serem retornados. Você pode especificar um número maior que o número de documentos a retornar ( $limit ) para aumentar a precisão. | Obrigatório |
path | string | Campo de tipo knnVector indexado a ser pesquisado. Consulte Construção de caminho para obter mais informações. | Obrigatório |
score | documento | Pontuação atribuída aos documentos correspondentes nos resultados. Para saber mais, consulte Comportamento de pontuação. | Opcional |
vector | array de números | Matriz de números dos tipos BSON int ou double que representam o vetor de query. O tamanho da matriz deve corresponder ao número do vetor dimensions especificado no índice para o campo. | Obrigatório |
Comportamento
Você pode executar consultas kNN em campos que foram indexados como Atlas Search tipo knnVector somente.
Você pode usar $limit
após o estágio $search
para limitar o número de documentos nos resultados da query knnBeta
. Recomendamos definir o valor para k
maior que o valor para $limit
. Esse padrão de solicitação excessiva é a principal maneira de compensar a latência e o recall nas pesquisas aproximadas do vizinho mais próximo. Empiricamente, vimos um multiplicador de 5-10 funcionar bem em muitos casos de uso, mas recomendamos ajustá-lo em seu conjunto de dados específico.
Exemplo
A query seguinte encontra 150
vizinhos mais próximos da query e limita o número restante de resultados para 50
.
1 db.<collection>.aggregate({ 2 "$search": { 3 "knnBeta": { 4 "vector": <array-of-numbers-to-search>, 5 "path": <indexed-field-to-search>, 6 "k": 150 7 } 8 } 9 }, 10 { 11 "$limit": 50 12 })
Desempenho
Para melhorar o desempenho da consulta, utilize o estágio $project
para selecionar os campos para retornar nos resultados, a menos que você precise de todos os campos nos resultados. Recomendamos excluir o campo de vetor no estágio $project
.
Pontuação
Você pode utilizar o campo score
com a expressão $meta searchScore
no estágio $project
para retornar a pontuação para os documentos nos resultados.
O Atlas Search classifica os resultados para queries kNN em um intervalo fixo de 0
a 1
apenas. Para cosine
e dotProduct
similaridades, o Atlas Search normaliza a pontuação utilizando o seguinte algoritmo:
score = (1 + cosine/dot_product(v1,v2)) / 2
Limitações
knnBeta
o operador deve ser o operador de nível superior em suas queries e, portanto, você não pode usar o operador knnBeta
dentro do seguinte:
Operador embeddedDocument
operador composto
coletor de facetas
Você não pode utilizar o operador knnBeta
para campos de query indexados utilizando um índice do tipo vectorSearch. Você não pode usar a opção de classificação com $search
o knnBeta
operador .
Não recomendamos a paginação dos resultados do Atlas Search usando $skip
e $limit
após o estágio $search
.
Exemplos
As queries a seguir procuram a collection sample_mflix.embedded_movies
de amostra usando o operator knnBeta
. As queries pesquisam no campo plot_embedding
, que contém embeddings criados utilizando o modelo de embeddings text-embedding-ada-002
do OpenAI. Se você adicionou a sample collection ao cluster do Atlas e criou a sample index definition para a coleção, poderá alternar para o banco de dados sample_mflix
e executar as seguintes queries na coleção.