Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Ejecuta una query de búsqueda vectorial en MongoDB

En esta guía, aprenderá a usar Mongoid para ejecutar consultas de búsqueda vectorial de MongoDB. La búsqueda vectorial de MongoDB le permite query sus documentos en función de su significado semántico mediante el uso de incrustaciones vectoriales.

Mongoid proporciona el método vector_search, que compila y ejecuta una etapa de agregación $vectorSearch para usted. Para aprender más sobre la etapa de agregación $vectorSearch, consulte la guía de operaciones de agregación.

Nota

Compatibilidad de implementación

Para usar la búsqueda vectorial de MongoDB, debe conectarse a un clúster de MongoDB Atlas o a una implementación autogestionada que ejecute MongoDB 8.2 o posterior.

Para aprender más sobre MongoDB Vector Search, se puede consultar MongoDB Vector Search Overview en la documentación de Atlas.

Antes de ejecutar una query de búsqueda vectorial de MongoDB, debe definir un campo vectorial y un índice de búsqueda vectorial en su modelo y, a continuación, crear el índice en su colección. Para aprender a declarar y crear índices de búsqueda vectorial, consulte la sección Índices de búsqueda vectorial de MongoDB de la guía de índices.

Los ejemplos de esta guía utilizan el siguiente modelo Movie, que se asigna a la colección embedded_movies de la base de datos sample_mflix. El campo plot_embedding almacena incrustaciones vectoriales de la trama de cada película.

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

Tip

Datos de muestra de Atlas

Para aprender a cargar los sample_mflix datos de muestra, consulte el tutorial Cargar datos en Atlas en la documentación de Atlas.

Para ejecutar una query de búsqueda vectorial de MongoDB, llama al método de clase vector_search en tu modelo y pasa un vector de query como primer argumento. El vector de query es una incrustación vectorial que representa tu entrada de búsqueda.

El siguiente ejemplo de código ejecuta una MongoDB búsqueda vectorial query en el campo plot_embedding e imprime el título de cada película coincidente. Debido a que el modelo Movie declara solo un índice de búsqueda vectorial, Mongoid selecciona automáticamente el índice y el campo vectorial que se utilizarán.

# 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

El método vector_search devuelve un arreglo de documentos Movie. Por defecto, devuelve los 10 documentos más similares. Para cambiar el número de resultados, establezca la opción limit. El ejemplo anterior especifica un límite de 5 resultados.

Cada documento que devuelve vector_search tiene un atributo vector_search_score, que describe lo bien que el documento coincide con el vector de query. Una puntuación más alta indica una coincidencia más cercana.

El siguiente código ejecuta la misma query que el ejemplo anterior, pero imprime el título y la puntuación de cada película coincidente:

movies = Movie.vector_search(query_vector, limit: 5)
movies.each do |movie|
puts "#{movie.title}: #{movie.vector_search_score}"
end

También puede llamar al método vector_search en una instancia de documento para buscar documentos similares a ese documento. Cuando llama a vector_search en un documento, Mongoid utiliza el vector almacenado del propio documento como vector de query y excluye el propio documento de los resultados.

El siguiente código busca las cinco películas más similares a un documento Movie existente:

movie = Movie.find_by(title: "About Time")
neighbors = movie.vector_search(limit: 5)
neighbors.each do |neighbor|
puts neighbor.title
end

Puede pasar los siguientes argumentos de palabra clave al método vector_search para personalizar su query:

Opción
Tipo
Descripción
Valor por defecto

index

String or Symbol

Nombre del índice de búsqueda vectorial a usar. Solo es necesario si el modelo declara más de un índice de búsqueda vectorial.

Inferido del modelo

path

String or Symbol

Campo que contiene las incrustaciones vectoriales. Obligatorio solo si el campo vectorial no se puede inferir a partir de la definición del índice.

Inferido del índice

limit

Integer

Número máximo de documentos para devolver.

10

num_candidates

Integer

Número de vecinos más cercanos a considerar durante la búsqueda.

limit * 10

filter

Hash

query utilizada para el filtro previo de documentos antes de la búsqueda.

Sin filtrado

pipeline

Array

Etapas de agregación adicionales para anexar después de la búsqueda vectorial.

Sin etapas adicionales

El siguiente código ejecuta una query de búsqueda vectorial de MongoDB que considera 150 candidatos y devuelve solo las películas estrenadas después del año 2000:

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

To learn more about these options, see the Fields section of the $vectorSearch operator reference in the Atlas documentation.

Para aprender a declarar y crear índices de búsqueda vectorial, consulte la sección Índices de búsqueda vectorial de MongoDB de la guía Índices.

Para aprender más sobre los conceptos mencionados en esta guía, consulte las siguientes páginas de la documentación de Atlas:

Para obtener más información sobre los métodos mencionados en esta guía, consulta la siguiente documentación de la API: