Uma query do MongoDB Vector Search assume a forma de um pipeline de agregação que utiliza $vectorSearch como o primeiro estágio. Esta página explica a sintaxe, as opções e o comportamento do estágio $vectorSearch.
Clientes aceitos
Sintaxe
Campos
O estágio $vectorSearch recebe um documento com os seguintes campos:
Tipos de pesquisas vetoriais
Ao definir um estágio$vectorSearch, você pode usar o campo exact 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 digitalizar 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.
Quando você executa uma pesquisa vetorial usando a estrutura de índice Hierarchical Navigable Small Worlds, o MongoDB Vector Search acumula resultados preenchendo uma fila de prioridade . O numCandidates parâmetro controla o tamanho dessa fila, que determina por quanto tempo procurar antes de retornar os principais limit resultados. Uma fila maior numCandidates (alta) permite que a pesquisa Explore mais o gráfico Hierarchical Navigable Small Worlds, potencialmente encontrando melhores correspondências ao custo de maior latência de query.
Recomendamos que você especifique um número numCandidates pelo menos 20 vezes maior que o número de documentos a serem devolvidos (limit) para aumentar a precisão e reduzir as discrepâncias entre os resultados da consulta ENN e ANN. Por exemplo, se você definir limit para retornar 5 resultados, considere definir numCandidates como 100 como ponto de partida. Para saber mais, veja Como medir a precisão dos resultados da sua 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:
Considerações
$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:
$facetestágio do 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.
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.
Filtragem de Vector Search do MongoDB
O MongoDB Vector Search oferece suporte à filtragem de dados. Você pode:
Pré-filtre seus dados usando a
filteropção em sua query do MongoDB Vector Search .Filtre os resultados da sua consulta do MongoDB Vector Search usando
$matche outros estágios do pipeline de agregação compatíveis.

O MongoDB Vector Search executa operações de pré e pós-filtro de forma independente em segmentos de dados. O gráfico HNSW para cada segmento é baseado somente nos vetores neste segmento. O MongoDB Vector Search aplica os filtros aos documentos de cada segmento para eliminar documentos que não atendam aos critérios do filtro. A pré-filtragem garante que os documentos sejam eliminados antes que o MongoDB Vector Search atravesse o gráfico HNSW e a pós-filtragem garante que documentos ou campos irrelevantes nos documentos sejam eliminados dos resultados da pesquisa vetorial.
Dados de pesquisa pré-filtro
Você pode pré-filtrar seus dados para restringir o escopo de sua pesquisa semântica e garantir que somente vetores relevantes sejam considerados para comparação. Quando você pré-filtra seus dados usando a opção filter, o MongoDB Vector Search executa a pesquisa semântica em somente um subconjunto de seus dados, reduzindo assim os recursos computacionais utilizados por sua query do MongoDB Vector Search e melhorando o desempenho.
A pré-filtragem pode ser muito restritiva, pois o pré-filtro pode excluir dados que não correspondem exatamente ao pré-filtro, mas são semanticamente semelhantes à query que você deseja considerar durante a pesquisa vetorial. Para mitigar isso, recomendamos definir um critério de filtro amplo para garantir que sua query faça o seguinte:
Inclui tantos resultados relevantes quanto possível.
Exclui dados irrelevantes dos resultados.
Retorna o número solicitado de documentos nos resultados.
Importante
As queries filtradas são normalmente mais lentas do que uma query não filtrada equivalente.
Resultados da pesquisa pós-filtro
Se o tamanho do índice não for ideal para a pré-filtragem ou se você definir critérios amplos de pré-filtragem, poderá pós-filtrar os resultados da pesquisa vetorial para retornar somente dados relevantes. Para filtrar os resultados de sua pesquisa vetorial, você pode usar qualquer estágio do pipeline de agregação compatível, como o $match estágio, após o estágio. Para saber mais,$vectorSearch consulte Recomendações adicionais de desempenho.
Para selecionar os campos para retornar nos resultados, use o $project estágio, a menos que você precise de todos os campos nos resultados. Recomendamos excluir o campo de vetor no $project estágio para melhorar o desempenho da query.
Por exemplo, você pode usar o estágio para incluir $project o vectorSearchScore e, em seguida, usar o estágio para retornar somente documentos acima de um determinado limite de $match pontuação.
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 filtragem, como pesquisa difusa, correspondência de frases, filtragem 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 de amostra usado na query ao seu cluster.
Criar índices de Vector Search MongoDB para a coleção. Para obter instruções, consulte o procedimento Criar um índice de Vector Search do MongoDB e copie as configurações das consultas de exemplo no idioma desejado.