Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Executar query ANN e ENN de pesquisa vetorial

Tipo de implementação
Embeddings
Interface

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.

$vectorSearch

O estágio $vectorSearch recebe um documento com os seguintes campos:

Ao definir um estágio$vectorSearch, você pode usar o campo exact para especificar se deseja executar uma pesquisa ANN ou ENN.

$vectorSearch deve ser o primeiro estágio de qualquer pipeline onde aparece.

$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.

Quando as queries chegam mais rápido do que o processo de pesquisa pode executá-las, o Atlas coloca o excesso de queries na fila e pode rejeitar queries com um erro 489. Para saber mais, consulte Redução de carga de query e Rejeição de query.

Para saber mais sobre esses tipos de campo do MongoDB Vector Search, consulte Como indexar campos para o Vector Search.

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.

MongoDB pesquisa vetorial suporta filtro de dados. Você pode:

Pré-filtro e pós-filtro do Atlas Vector Search

A pesquisa vetorial do MongoDB executa operações de pré-filtro e publicação-filtro independentemente em segmentos de dados. O grafo HNSW para cada segmento é baseado apenas nos vetores nesse segmento. A pesquisa vetorial do MongoDB aplica os filtros aos documentos de cada segmento para eliminar documentos que não atendem aos critérios de filtro. A pré-filtragem garante que os documentos sejam eliminados antes que a pesquisa vetorial do MongoDB percorra o grafo HNSW e a filtragem após a publicação garante que documentos ou campos irrelevantes nos documentos sejam eliminados dos resultados da pesquisa vetorial.

Você pode pré-filtrar seus dados para restringir o escopo da sua pesquisa semântica e garantir que apenas vetores relevantes sejam considerados para comparação. Quando você pré-filtra seus dados usando a opção filter, a pesquisa vetorial do MongoDB executa a pesquisa semântica em apenas um subconjunto de seus dados, o que aumenta a precisão dos resultados da pesquisa.

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 atenuar isso, recomendamos definir um critério de filtro amplo para garantir que sua query faça o seguinte:

  • Inclui o máximo de resultados relevantes 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.

Se o tamanho do seu índice não for ideal para pré-filtro ou se você definir critérios de pré-filtro amplos, poderá pós-filtro os resultados da pesquisa vetorial para retornar apenas dados relevantes. Para filtrar os resultados da pesquisa vetorial, você pode usar qualquer fase do pipeline de agregação compatível, como a fase $match, após a fase $vectorSearch. Para aprender mais, consulte Recomendações adicionais de desempenho.

Para selecionar os campos a serem retornados nos resultados, utilize o estágio $project, a menos que você precise de todos os campos nos resultados. Recomendamos excluir o campo de vetor no estágio $project para melhorar o desempenho da query.

Por exemplo, você pode usar o estágio $project para incluir o vectorSearchScore e, em seguida, usar o estágio $match para retornar apenas documentos acima de um determinado limite de pontuação.

  • O MongoDB Vector Search suporta a forma abreviada de $eq. Na forma abreviada, você não precisa especificar $eq na 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 $and operador MQL para especificar um array de filtros em uma única query.

    Por exemplo, considere o seguinte pré-filtro para documentos com um campo genres igual a Action e um campo year com o valor 1999, 2000 ou 2001:

    "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.

Antes de executar estes exemplos, realize as seguintes ações:

Os tutoriais a seguir demonstram casos de uso adicionais para o estágio $vectorSearch.