Una consulta de búsqueda vectorial de MongoDB adopta la forma de una canalización de agregación que utiliza $vectorSearch como primera etapa. Esta página explica la sintaxis, las opciones y el comportamiento de la etapa $vectorSearch.
Clientes compatibles
Sintaxis
Campos
La etapa $vectorSearch procesa un documento con los siguientes campos:
Tipos de búsqueda vectorial
Cuando define una etapa $vectorSearch, puede usar el campo exact para especificar si desea ejecutar una búsqueda ANN o ENN.
Para la búsqueda de Approximate Nearest Neighbors (ANN), MongoDB Vector Search encuentra las incrustaciones vectoriales en sus datos que están más cercanas a la incrustación vectorial de su query, basándose en su proximidad en el espacio multidimensional y en el número de vecinos que considera. Se debe usar el algoritmo Hierarchical Navigable Small Worlds y encontrar las incrustaciones vectoriales más similares a la incrustación vectorial en la query sin escanear todos los vectores. Por lo tanto, la búsqueda ANN es ideal para consultar grandes conjuntos de datos sin un filtro significativo.
Nota
El recall óptimo para la búsqueda ANN se considera habitualmente que es un solapamiento de resultados de entre el 90y el95% con la búsqueda ENN, pero con una latencia significativamente menor. Esto ofrece un buen equilibrio entre precisión y rendimiento. Para lograr esto con MongoDB Búsqueda vectorial, ajuste el parámetro numCandidates en el momento de la query.
numCandidates Selección
Debe especificar el campo numCandidates para ejecutar la búsqueda ANN. Este campo determina cuántos vecinos más cercanos considera MongoDB Vector Search durante la búsqueda.
Al realizar una búsqueda vectorial utilizando la estructura de índice Hierarchical Navigable Small Worlds, MongoDB Vector Search acumula resultados llenando una cola de prioridad. El parámetro numCandidates controla el tamaño de esta cola, que determina cuánto tiempo se tarda en buscar antes de devolver los limit mejores resultados. Una cola más grande (mayor numCandidates) permite que la búsqueda explore una mayor parte del grafo Hierarchical Navigable Small Worlds, lo que podría encontrar mejores coincidencias a costa de una mayor latencia de consulta.
Le recomendamos que especifique un número de numCandidates al menos 20 veces mayor que el número de documentos a devolver (limit) para aumentar la precisión y reducir las discrepancias entre los resultados de la query de ENN y ANN. Por ejemplo, si configura limit para devolver 5 resultados, considere establecer numCandidates en 100 como punto de partida. Para obtener más información, consulte Cómo medir la precisión de los resultados de la query.
Este patrón de sobrepeticiones es la forma recomendada de equilibrar la latencia y la recuperación en las búsquedas de ANN. Sin embargo, recomendamos ajustar el parámetro numCandidates en función del tamaño específico del conjunto de datos y los requisitos de las queries. Para garantizar la obtención de resultados precisos, se deben considerar las siguientes variables:
Para una búsqueda de vecinos más cercanos exactos (ENN), MongoDB Vector Search busca exhaustivamente en todos los embeddings de vectores indexados calculando la distancia entre todos los embeddings y encuentra el vecino más cercano exacto para el embedding de vector en tu query. Esto requiere un uso intensivo de cálculos y podría impactar negativamente la latencia de la query. Por lo tanto, recomendamos ENN búsquedas para los siguientes casos de uso:
Considerations
$vectorSearch debe ser la primera etapa de cualquier pipeline en el que aparezca.
Limitaciones
$vectorSearch no se puede utilizar en la definición de la vista ni en las siguientes etapas de la canalización:
$facetetapa de pipeline
| [1] | Puedes pasar los resultados de $vectorSearch a esta etapa. |
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 prefiltrado de sus datos no afecta la puntuación que devuelve MongoDB Vector Search al usar vectorSearchScore para consultas $vectorSearch.
Filtro de búsqueda vectorial de MongoDB
MongoDB Búsqueda vectorial admite el filtro de datos. Puede:
Filtra previamente tus datos utilizando la opción
filteren tu consulta de búsqueda vectorial de MongoDB.Filtre posteriormente los resultados de su consulta de búsqueda vectorial de MongoDB utilizando
$matchy otras etapas de canalización de agregación compatibles.

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 prefiltrado o si establece criterios de prefiltrado amplios, puede aplicar un postfiltrado a los resultados de su búsqueda vectorial para obtener solo los datos relevantes. Para filtrar los resultados de su búsqueda vectorial, puede usar cualquier etapa de la canalización de agregación compatible, como la etapa $match, después de la etapa $vectorSearch. Para obtener más información, consulte Recomendaciones adicionales de rendimiento.
Para seleccionar los campos que se mostrarán en los resultados, utilice la etapa $project a menos que necesite que se muestren todos los campos. Recomendamos excluir el campo vectorial en la etapa $project para mejorar el rendimiento de la consulta.
Por ejemplo, puede usar la etapa $project para incluir la vectorSearchScore y luego usar la etapa $match para devolver solo los documentos que superen un determinado umbral de puntuación.
Consideraciones del filtro
MongoDB Vector Search admite la forma abreviada
$eq. En la forma abreviada, no es necesario especificar$eqen la consulta.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 operador
$andMQL 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 de filtrado avanzadas como búsqueda difusa, coincidencia de frases, filtrado de 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:
Agregue el conjunto de datos de ejemplo utilizado en la consulta a su 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.