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 en MongoDB. La búsqueda vectorial en MongoDB le permite consultar sus documentos según su significado semántico mediante incrustaciones vectoriales.

Mongoid proporciona el vector_search método, que crea y ejecuta una $vectorSearch etapa de agregación automáticamente. Para obtener más información sobre la $vectorSearch etapa de agregación, consulte la guía de Operaciones de agregación.

Nota

Compatibilidad de implementación

Para utilizar MongoDB Vector Search, debe conectarse a un clúster de MongoDB Atlas o a una implementación autogestionada que ejecute MongoDB 8.2 o posterior.

Para obtener más información sobre MongoDB Vector Search, consulta la Descripción general de MongoDB Vector Search en la documentación de Atlas.

Antes de poder ejecutar una consulta de búsqueda vectorial en MongoDB, debe definir un campo vectorial y un índice de búsqueda vectorial en su modelo, y luego crear el índice en su colección. Para obtener información sobre cómo 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 corresponde con la colección embedded_movies de la base de datos sample_mflix. El campo plot_embedding almacena las 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 del 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 consulta de búsqueda vectorial en MongoDB, llame al método de clase vector_search de su modelo y pase un vector de consulta como primer argumento. El vector de consulta es una representación vectorial que indica los datos de entrada de su búsqueda.

El siguiente ejemplo de código ejecuta una consulta de búsqueda vectorial de MongoDB en el campo plot_embedding e imprime el título de cada película coincidente. Dado 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
Thrill Seekers
About Time
The Time Machine
Timecop
Crusade in Jeans

El método vector_search devuelve un array de Movie documentos. Por defecto, devuelve los 10 documentos más similares. Para cambiar el número de resultados, configure 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 qué tan bien coincide el documento con el vector de consulta. Una puntuación más alta indica una coincidencia más precisa.

El siguiente código ejecuta la misma consulta 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
Thrill Seekers: 0.9253387451171875
About Time: 0.9246978759765625
The Time Machine: 0.9229583740234375
Timecop: 0.9228057861328125
Crusade in Jeans: 0.9222259521484375

También puedes llamar al método vector_search en una instancia de documento para encontrar documentos similares. Cuando llamas al método vector_search en un documento, Mongoid usa el vector almacenado del propio documento como vector de consulta y excluye el documento en sí de los resultados.

El siguiente código encuentra 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
Thrill Seekers
The Time Machine
Timecop
Crusade in Jeans
Frequency

Puedes pasar los siguientes argumentos de palabra clave al método vector_search para personalizar tu consulta:

Opción
Tipo
Descripción
Valor por defecto

index

String or Symbol

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

Inferido a partir del modelo

path

String or Symbol

Campo que contiene las incrustaciones vectoriales. Solo es necesario 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 a devolver.

10

num_candidates

Integer

Número de vecinos más cercanos a tener en cuenta durante la búsqueda.

limit * 10

filter

Hash

Consulta utilizada para prefiltrar documentos antes de la búsqueda.

Sin filtrado

pipeline

Array

Etapas de agregación adicionales que se añadirán después de la búsqueda del vector.

No hay etapas adicionales

El siguiente código ejecuta una consulta 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 } }
)

Para obtener más información sobre estas opciones, consulta la sección Campos de la referencia del operador $vectorSearch en la documentación de Atlas.

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.

Para obtener más información 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: