Overview
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.
Requisitos previos
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.
Ejecutar una consulta de búsqueda vectorial
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.
Puntaje de búsqueda vectorial
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
Buscar documentos similares
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
Opciones de búsqueda vectorial
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 |
|---|---|---|---|
|
| 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 |
|
| 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 |
|
| Número máximo de documentos a devolver. |
|
|
| Número de vecinos más cercanos a tener en cuenta durante la búsqueda. |
|
|
| Consulta utilizada para prefiltrar documentos antes de la búsqueda. | Sin filtrado |
|
| 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.
Información Adicional
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:
Documentación de la API
Para obtener más información sobre los métodos mencionados en esta guía, consulta la siguiente documentación de la API: