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.
Menu Docs

Executar uma query de pesquisa vetorial do MongoDB

Neste guia, você pode aprender a usar o Mongoid para executar query de pesquisa vetorial do MongoDB. A pesquisa vetorial do MongoDB permite que você consulte seus documentos com base em seu significado semântico usando embedding vetoriais.

O Mongoid fornece o método vector_search, que cria e executa um estágio de agregação $vectorSearch para você. Para saber mais sobre o estágio de agregação $vectorSearch, consulte o guia Operações de agregação.

Observação

Compatibilidade de implantação

Para usar a pesquisa vetorial do MongoDB, você deve se conectar a um cluster do MongoDB Atlas ou a uma implantação autogerenciada executando o MongoDB 8.2 ou posterior.

Para saber mais sobre a pesquisa vetorial do MongoDB, consulte a Visão geral da pesquisa vetorial do MongoDB na documentação do Atlas.

Antes de executar uma query de pesquisa vetorial do MongoDB, você deve definir um campo vetorial e um índice de pesquisa vetorial em seu modelo e, em seguida, criar o índice em sua coleção. Para aprender a declarar e criar índice de pesquisa vetorial, consulte a seção Índice de pesquisa vetorial do MongoDB do guia Índice.

Os exemplos neste guia usam o seguinte modelo Movie, que mapeia para a coleção embedded_movies no banco de dados sample_mflix. O campo plot_embedding armazena embeddings de vetor do enredo de cada filme.

class Movie
include Mongoid::Document
store_in collection: "embedded_movies", database: "sample_mflix"
field :title, type: String
field :plot, type: String
field :year, type: Integer
field :plot_embedding, type: Array
# Declare a vector search index on the `plot_embedding` field. The `_id`
# and `year` filter fields enable instance-level and filtered queries.
vector_search_index :plot_embedding_index,
fields: [
{
type: "vector",
path: "plot_embedding",
numDimensions: 1536,
similarity: "cosine"
},
{
type: "filter",
path: "_id"
},
{
type: "filter",
path: "year"
}
]
end

Dica

Dados de amostra do Atlas

Para aprender a carregar os dados de amostra sample_mflix, consulte o tutorial Carregar dados no Atlas na documentação do Atlas.

Para executar uma query de pesquisa vetorial do MongoDB, chame o método da classe vector_search em seu modelo e passe um vetor de query como o primeiro argumento. O vetor de query é um embedding vetorial que representa sua entrada de pesquisa.

O exemplo de código a seguir executa uma query do MongoDB pesquisa vetorial no campo plot_embedding e imprime o título de cada filme correspondente. Como o modelo Movie declara apenas um índice de pesquisa vetorial, o Mongoid seleciona automaticamente o índice e o campo de vetor a serem usados.

# The query vector must have the same number of dimensions as the
# vector search index (1536, in this example).
query_vector = [ -0.0016261312, -0.028070757, -0.011342932, ..., -0.009710136 ]
movies = Movie.vector_search(query_vector, limit: 5)
movies.each do |movie|
puts movie.title
end
Thrill Seekers
About Time
The Time Machine
Timecop
Crusade in Jeans

O método vector_search retorna um array de Movie documentos. Por padrão, ele retorna os 10 documentos mais semelhantes. Para alterar o número de resultados, defina a opção limit. O exemplo anterior especifica um limite de 5 resultados.

Cada documento que vector_search retorna tem um atributo vector_search_score, que descreve o quão bem o documento corresponde ao vetor de query. Uma pontuação mais alta indica uma correspondência mais próxima.

O código a seguir executa a mesma query do exemplo anterior, mas imprime o título e a pontuação de cada filme correspondente:

movies = Movie.vector_search(query_vector, limit: 5)
movies.each do |movie|
puts "#{movie.title}: #{movie.vector_search_score}"
end
Thrill Seekers: 0.9253387451171875
About Time: 0.9246978759765625
The Time Machine: 0.9229583740234375
Timecop: 0.9228057861328125
Crusade in Jeans: 0.9222259521484375

Você também pode chamar o método vector_search em uma instância de documento para encontrar documentos semelhantes a esse documento. Quando você chama vector_search em um documento, o Mongoid usa o vetor armazenado do próprio documento como o vetor de query e exclui o próprio documento dos resultados.

O código a seguir encontra os cinco filmes mais semelhantes a um documento Movie existente:

movie = Movie.find_by(title: "About Time")
neighbors = movie.vector_search(limit: 5)
neighbors.each do |neighbor|
puts neighbor.title
end
Thrill Seekers
The Time Machine
Timecop
Crusade in Jeans
Frequency

Você pode passar os seguintes argumentos de palavra-chave para o método vector_search para customizar sua query:

Opção
Tipo
Descrição
Valor padrão

index

String ou Symbol

Nome do índice de pesquisa vetorial a ser usado. Obrigatório somente se o modelo declarar mais de um índice de pesquisa vetorial.

Inferido do modelo

path

String ou Symbol

Campo que contém o embedding vetorial. Necessário somente se o campo vetorial não puder ser inferido a partir da definição do índice.

Inferido do índice

limit

Integer

Número máximo de documentos a retornar.

10

num_candidates

Integer

Número de vizinhos mais próximos a serem considerados durante a pesquisa.

limit * 10

filter

Hash

Query usada para pré-filtro documentos antes da pesquisa.

Sem filtragem

pipeline

Array

Estágios de agregação adicionais a serem anexados após a pesquisa vetorial.

Nenhum estágio adicional

O código a seguir executa uma query de pesquisa vetorial do MongoDB que considera 150 candidatos e retorna apenas filmes lançados após o ano 2000:

movies = Movie.vector_search(
query_vector,
limit: 5,
num_candidates: 150,
filter: { year: { "$gt" => 2000 } }
)

Para saber mais sobre essas opções, consulte a seção Campos da referência do operador $vectorSearch na documentação do Atlas.

Para aprender a declarar e criar índices de pesquisa vetorial, consulte a seção Índices de pesquisa vetorial do MongoDB do guia Índices.

Para aprender mais sobre os conceitos mencionados neste guia, consulte as seguintes páginas na documentação do Atlas:

Para saber mais sobre os métodos mencionados neste guia, consulte a seguinte documentação da API: