Uma query do MongoDB Vector Search tem a forma de um agregação pipeline do que utiliza como o primeiro estágio. Esta página explica $vectorSearch $vectorSearch a sintaxe, as opções e o comportamento do estágio.
Clientes aceitos
Sintaxe
Campos
O estágio $vectorSearch recebe um documento com os seguintes campos:
Tipos de pesquisas vetoriais
Ao definir um estágio, você pode usar $vectorSearch o exact campo para especificar se deseja executar uma pesquisa ANN ou ENN.
Para a pesquisa ANN, o MongoDB pesquisa vetorial encontra incorporações vetoriais em seus dados que estão mais próximas da incorporação vetorial em sua query com base em sua proximidade no espaço multidimensional e com base no número de vizinhos que considera. Ele usa o algoritmo Hierarchical Navigable Small Worlds e encontra as incorporações vetoriais mais semelhantes à incorporação vetorial em sua query sem examinar todos os vetores. Portanto, a pesquisa ANN é ideal para consultar grandes conjuntos de dados sem filtro significativo.
Observação
Normalmente, considera-se que a recuperação ideal para a pesquisa ANN esteja em torno de 90a95% de sobreposição nos resultados com a pesquisa ENN, mas com latência significativamente menor. Isso fornece um bom equilíbrio entre precisão e desempenho. Para conseguir isso com a Vector Search do MongoDB, ajuste o parâmetro numCandidates no momento da query.
numCandidates Seleção
Você deve especificar o campo numCandidates para executar a pesquisa ANN. Este campo determina quantos vizinhos mais próximos a pesquisa vetorial MongoDB considera durante a pesquisa.
Recomendamos que você especifique um numCandidates número pelo menos 20 vezes maior que o número de documentos a serem devolvidoslimit () para aumentar a precisão e reduzir as discrepâncias entre os resultados da consulta ENN e ANN. Por exemplo, se você limit definir para retornar 5 resultados, considere definir numCandidates 100 como como ponto de partida. Para saber mais, consulte Como medir a precisão dos resultados da query.
Esse padrão de solicitação excessiva é a maneira recomendada de compensar a latência e a recuperação em suas pesquisas de ANN. No entanto, recomendamos ajustar o parâmetro numCandidates com base no tamanho específico do conjunto de dados e nos requisitos de query. Para garantir que você obtenha resultados precisos, considere as seguintes variáveis:
Para uma pesquisa ENN (ENN), a pesquisa vetorial do MongoDB pesquisa exaustivamente todas as incorporações de vetor indexadas calculando a distância entre todas as incorporações e encontra o vizinho mais próximo exato para a incorporação do vetor em sua query. Isso é computacionalmente intensivo e pode impacto negativamente a latência da query. Portanto, recomendamos pesquisas ENN para os seguintes casos de uso:
Comportamento
$vectorSearch deve ser o primeiro estágio de qualquer pipeline onde
aparece.
Limitações
$vectorSearch não pode ser usado na definição de exibição e nos seguintes estágios de pipeline:
| [1] | Você pode passar os resultados de $vectorSearch para este estágio. |
Indexação de pesquisa vetorial do MongoDB
Para saber mais sobre esses tipos de campo do MongoDB Vector Search, consulte Como indexar campos para o Vector Search.
Pontuação da pesquisa vetorial do MongoDB
O MongoDB Vector Search atribui uma pontuação, em um intervalo fixo de 0 a 1 (onde 0 indica baixa similaridade e 1 indica alta similaridade), a cada documento retornado.
Cada documento retornado inclui a pontuação como metadados. Para retornar a pontuação de cada documento junto com o conjunto de resultados, use um $project estágio em seu pipeline de agregação e configure o score como um campo para projeto. No campo score, especifique uma expressão $meta com o valor vectorSearchScore. A sintaxe é a seguinte:
1 db.<collection>.aggregate([ 2 { 3 "$vectorSearch": { 4 <query-syntax> 5 } 6 }, 7 { 8 "$project": { 9 "<field-to-include>": 1, 10 "<field-to-exclude>": 0, 11 "score": { "$meta": "vectorSearchScore" } 12 } 13 } 14 ])
Observação
Você pode usar vectorSearchScore como uma expressão score $meta somente após o estágio do pipeline $vectorSearch. Se você utilizar vectorSearchScore após qualquer outra query, o MongoDB registrará um aviso a partir do MongoDB v8.2.
Observação
A pré-filtragem de seus dados não afeta a pontuação que o MongoDB Vector Search retorna usando vectorSearchScore para $vectorSearch consultas.
Pré-filtragem da pesquisa vetorial MongoDB
A opção filter $vectorSearch corresponde aos valores booleanos, data, objectId, valores numéricos, de string e UUID do BSON, incluindo arrays desses tipos.
Você deve indexar os campos nos quais deseja filtrar os dados como tipo de filtro em uma definição de índice do tipo vectorSearch. É útil filtrar os dados para restringir o escopo da pesquisa semântica e garantir que nem todos os vetores sejam considerados para comparação.
O MongoDB Vector Search suporta a opção $vectorSearch filter para os seguintes operadores MQL:
Tipo | Operador MQL |
|---|---|
Igualdade | |
faixa | |
No conjunto | |
Existência | |
Lógica |
Observação
A opção $vectorSearch filter não suporta outros operadores de query, operadores de pipeline de agregação ou operadores de pesquisa MongoDB.
Considerações de filtro
O MongoDB Vector Search suporta a forma abreviada de
$eq. Na forma abreviada, você não precisa especificar$eqna query.Por exemplo, considere o seguinte filtro com
$eq:"filter": { "_id": { "$eq": ObjectId("5a9427648b0beebeb69537a5") } Isso equivale ao seguinte filtro, que usa a forma abreviada de
$eq:"filter": { "_id": ObjectId("5a9427648b0beebeb69537a5") } Você pode usar o
$andoperador MQL para especificar uma array de filtros em uma única query.Por exemplo, considere o seguinte pré-filtro para documentos com um campo
genresigual aActione um campoyearcom o valor1999,2000ou2001:"filter": { "$and": [ { "genres": "Action" }, { "year": { "$in": [ 1999, 2000, 2001 ] } } ] } Para funcionalidades avançadas de filtro, como pesquisa difusa, correspondência de frases, filtro de localização e outros textos analisados, use o operador vectorSearch em um estágio
$search.
Exemplos
Pré-requisitos
Antes de executar estes exemplos, realize as seguintes ações:
Adicione o conjunto de dados ao seu cluster.
Criar índices de pesquisa Vector Search MongoDB para a coleção. Para obter instruções, consulte o procedimento Criar um índice de pesquisa vetorial do MongoDB e copie as configurações dos exemplos básicos ou de filtro na linguagem desejada.
Observação
Se você usar mongosh, colar o queryVector do código de amostra no seu terminal pode levar algum tempo, dependendo da sua máquina.