Menu Docs

Página inicial do DocsIniciar e gerenciar o MongoDBMongoDB Atlas

knnBeta

Nesta página

  • Definição
  • Sintaxe
  • Opções
  • Comportamento
  • Exemplos
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.

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}
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

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.

1db.<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})

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 .

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

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:

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 .

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.

← Em