Una consulta de búsqueda vectorial de MongoDB se realiza mediante 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 $vectorSearch etapa.
Clientes compatibles
Sintaxis
Campos
La etapa $vectorSearch procesa un documento con los siguientes campos:
Tipos de búsqueda vectorial
Cuando definís una etapa $vectorSearch, podés utilizar el campo exact para indicar si querés 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
La recuperación óptima para la búsqueda ANN se considera generalmente entre un 5 % y 90un956 % de coincidencia de resultados con la búsqueda ENN, pero con una latencia significativamente menor. Esto proporciona un buen equilibrio entre precisión y rendimiento. Para lograrlo con MongoDB Vector Search, ajuste el numCandidates parámetro en el momento de la consulta.
numCandidates Selección
Se debe especificar el campo numCandidates para ejecutar una búsqueda ANN. Este campo determina cuántos vecinos más cercanos considera MongoDB búsqueda vectorial durante la búsqueda.
Recomendamos que especifiques un número 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 tus resultados de query de ENN y ANN. Por ejemplo, si estableces limit para devolver 5 resultados, considera 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 su query.
Este patrón de sobrepetición es la forma recomendada de equilibrar la latencia y la capacidad de 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 vista ni en las siguientes etapas de la canalización:
$facetetapa de pipeline
| [1] | Puedes pasar los resultados de a esta $vectorSearch 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 los datos no afecta la puntuación que la búsqueda vectorial de MongoDB devuelve al usar vectorSearchScore para los queries $vectorSearch.
Pre-filtrado MongoDB Vector Search
Importante
Las **query**s filtradas suelen ser más lentas que una **query** no filtrada equivalente.
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") } Puedes usar 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 difusa, coincidencia de frases, filtrado por ubicación y otros textos analizados, utiliza el operador vectorSearch en una etapa de
$search.
Ejemplos
Requisitos previos
Antes de ejecutar estos ejemplos, realiza las siguientes acciones:
Agrega el conjunto de datos de muestra utilizado en la query a tu clúster.
Cree índices de búsqueda de MongoDB para la colección. Para obtener instrucciones, consulta el procedimiento Crear un índice de búsqueda vectorial de MongoDB y copia las configuraciones para las query de muestra en tu lenguaje preferido.