Una query de MongoDB búsqueda vectorial adopta la forma de un pipeline de agregación que utiliza $vectorSearch como primera etapa. Esta página explica la sintaxis, las opciones y el comportamiento de la $vectorSearch etapa.
Clientes compatibles
Sintaxis
Campos
La etapa $vectorSearch procesa un documento con los siguientes campos:
Tipos de búsqueda vectorial
Cuando defines una etapa $vectorSearch, puedes usar el campo exact para especificar si deseas ejecutar una búsqueda ANN o ENN.
Considerations
$vectorSearch debe ser la primera etapa de cualquier pipeline en el que aparezca.
Limitaciones
$vectorSearch no se puede utilizar en definición de vista ni en las siguientes etapas de la pipeline:
$facetetapa de pipeline
| [1] | Puede transferir los resultados de $vectorSearch a esta etapa. |
Protección de sobrecarga
Cuando las consultas llegan más rápido de lo que el proceso de búsqueda puede procesarlas, Atlas las pone en cola y puede rechazarlas con un error 489. Para obtener más información, consulte Reducción de carga de consultas y Rechazo de consultas.
MongoDB Vector Search indexación
Para obtener más información sobre estos tipos de campos de búsqueda vectorial de MongoDB, consulte Cómo indexar campos para la búsqueda vectorial.
Puntuación de MongoDB Vector Search
La búsqueda vectorial de MongoDB asigna una puntuación, en un rango fijo de 0 a 1 (donde 0 indica baja similitud y 1 indica alta similitud), a cada documento que devuelve.
Nota
El prefiltro de sus datos no afecta a la puntuación que devuelve la búsqueda vectorial de MongoDB mediante vectorSearchScore para $vectorSearch queries.
Filtro de búsqueda vectorial de MongoDB
MongoDB Búsqueda vectorial admite el filtro de datos. Puede:
Pre-filtro sus datos utilizando la opción
filteren su query de búsqueda vectorial de MongoDB.posfiltro los resultados de su query de búsqueda vectorial de MongoDB utilizando
$matchy otras etapas del pipeline de agregación.

MongoDB búsqueda vectorial realiza operaciones de prefiltro y publicaciónfiltro de forma independiente en segmentos de datos. El grafo HNSW de cada segmento se basa únicamente en los vectores de ese segmento. MongoDB búsqueda vectorial aplica los filtros a los documentos de cada segmento para eliminar los documentos que no cumplen los criterios de filtro. El prefiltrado garantiza que los documentos se eliminen antes de que MongoDB Vector Search recorra el grafo HNSW y el posfiltrado garantiza que los documentos o campos irrelevantes de los documentos se eliminen de los resultados de la búsqueda vectorial.
Datos de búsqueda previos al filtro
Puede pre-filtrar sus datos para reducir el alcance de su búsqueda semántica y garantizar que solo se tengan en cuenta los vectores relevantes para la comparación. Cuando filtra previamente sus datos utilizando la opción filter, MongoDB búsqueda vectorial realiza la búsqueda semántica solo en un subconjunto de sus datos, lo que aumenta la precisión de los resultados de la búsqueda.
El prefiltro puede ser demasiado restrictivo, ya que puede excluir datos que no coinciden exactamente con el prefiltro, pero que son semánticamente similares a la query que desea considerar durante la búsqueda vectorial. Para mitigar esto, recomendamos establecer un criterio de filtro amplio para garantizar que su query haga lo siguiente:
Incluye tantos resultados relevantes como sea posible.
Excluye los datos irrelevantes de los resultados.
Devuelve el número solicitado de documentos en los resultados.
Importante
Las **query**s filtradas suelen ser más lentas que una **query** no filtrada equivalente.
Resultados de la búsqueda publicación-filtro
Si el tamaño de su índice no es óptimo para el prefiltro o si establece criterios de prefiltro amplios, puede postfiltrar los resultados de la búsqueda vectorial para devolver solo datos relevantes. Para filtrar los resultados de su búsqueda vectorial, puede utilizar cualquiera de las etapas del pipeline de agregación compatibles, como la $match etapa, después de la $vectorSearch etapa. Para aprender más, consulte Recomendaciones de rendimiento adicionales.
Para seleccionar los campos que se devolverán en los resultados, utilice la etapa $project a menos que necesite todos los campos en los resultados. Recomendamos excluir el campo vectorial en la $project etapa para mejorar el rendimiento de la query.
Por ejemplo, puede utilizar la etapa $project para incluir el vectorSearchScore y, a continuación, utilizar la etapa $match para devolver únicamente los documentos que superen un determinado umbral de puntuación.
Consideraciones del filtro
La búsqueda vectorial de MongoDB admite la forma abreviada de
$eq. En la forma abreviada, no es necesario especificar$eqen la query.Por ejemplo, considere el siguiente filtro con
$eq:"filter": { "_id": { "$eq": ObjectId("5a9427648b0beebeb69537a5") } Esto es equivalente al siguiente filtro, que utiliza la forma corta de
$eq:"filter": { "_id": ObjectId("5a9427648b0beebeb69537a5") } Puede utilizar el
$andMQL operador para especificar un arreglo de filtros en una sola query.Por ejemplo, considere el siguiente prefiltro para documentos con un campo
genresigual aActiony un campoyearcon el valor1999,2000o2001:"filter": { "$and": [ { "genres": "Action" }, { "year": { "$in": [ 1999, 2000, 2001 ] } } ] } Para capacidades avanzadas de filtrado como búsqueda aproximada, coincidencia de frases, filtro por ubicación y otros textos analizados, utilice el operador vectorSearch en una etapa
$search.
Ejemplos
Requisitos previos
Antes de ejecutar estos ejemplos, realiza las siguientes acciones:
Añade el conjunto de datos de muestra utilizado en la query a tu clúster.
Cree índices de búsqueda vectorial de MongoDB para la colección. Para obtener instrucciones, consulte el procedimiento Crear un índice de MongoDB búsqueda vectorial y configure el índice para las query de muestra en el lenguaje que desee.
Queries
Obtén más información
Los siguientes tutoriales demuestran casos de uso adicionales para la etapa $vectorSearch.