Una MongoDB Vector Search tiene la forma de un pipeline de agregación que usa $vectorSearch como la 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 defines un $vectorSearch etapa, puedes usar el campo exact para especificar si ejecutar un BúsquedaANN o ENN.
Para la búsqueda de vecinos más cercanos aproximados (RNA), MongoDB Vector Search encuentra incrustaciones vectoriales en sus datos que son más cercanas a la incrustación vectorial de su consulta, basándose en su proximidad en el espacio multidimensional y en el número de vecinos que considera. Utiliza los mundos pequeños navegables jerárquicos.El algoritmo encuentra las incrustaciones vectoriales más similares a la incrustación vectorial de tu query sin escanear cada vector. Por lo tanto, la búsqueda ANN es ideal para consultar conjuntos de datos grandes sin un filtrado importante.
Nota
Se considera que la recuperación óptima para la búsqueda ANN se sitúa entre el % y 90el95% en la superposición 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 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 especificar un numCandidates número al menos 20 veces mayor que el número de documentos a devolverlimit () para aumentar la precisión y reducir las discrepancias entre los resultados de las consultas ENN y ANN. Por ejemplo, si limit configura 5 para que devuelva resultados, considere configurar numCandidates a 100 como punto de partida. Para obtener más información, consulte Cómo medir la precisión de los resultados de las consultas.
Este patrón de sobresolicitud es la forma recomendada de equilibrar la latencia y la recuperación en las búsquedas de ANN. Sin embargo, recomendamos ajustar el numCandidates parámetro según el tamaño específico de su conjunto de datos y los requisitos de la consulta. Para garantizar resultados precisos, considere las siguientes variables:
Para una búsqueda de vecinos más cercanos exactos (ENN), MongoDB Vector Search busca exhaustivamente todas las incrustaciones vectoriales indexadas calculando la distancia entre ellas y encuentra el vecino más cercano exacto para la incrustación vectorial en la consulta. Esto requiere un alto consumo computacional y podría afectar negativamente la latencia de la consulta. Por lo tanto, recomendamos las búsquedas ENN para los siguientes casos de uso:
Comportamiento
$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:
| [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 búsqueda vectorial de MongoDB
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.
Cada documento devuelto incluye la puntuación como metadatos. Para devolver la puntuación de cada documento junto con el conjunto de resultados, utilice una etapa en su canal de agregación y configure $project como score campo para proyectar. En el score campo, especifique una expresión $meta con el vectorSearchScore valor. La sintaxis es la siguiente:
1 db.<collection>.aggregate([ 2 { 3 "$vectorSearch": { 4 <query-syntax> 5 } 6 }, 7 { 8 "$project": { 9 "<field-to-include>": 1, 10 "<field-to-exclude>": 0, 11 "score": { "$meta": "vectorSearchScore" } 12 } 13 } 14 ])
Nota
Puedes usar vectorSearchScore como una expresión score $meta solamente después de la etapa de $vectorSearch del pipeline. Si usa vectorSearchScore después de cualquier otra query, MongoDB registra una advertencia a partir de MongoDB v8.2.
Nota
El prefiltrado de sus datos no afecta a la puntuación que devuelve la búsqueda vectorial de MongoDB mediante vectorSearchScore para queries $vectorSearch.
Pre-filtrado MongoDB Vector Search
La opción de filter $vectorSearch coincide con valores BSON booleanos, de fecha, objectId, numéricos, de string y UUID, incluidos arreglos de estos tipos.
Debe indexar los campos por los que desea filtrar sus datos como el tipo de filtro en la definición de un índice de tipo vectorSearch. Filtrar sus datos es útil para reducir el alcance de su búsqueda semántica y garantizar que no se tengan en cuenta todos los vectores para la comparación.
La búsqueda vectorial de MongoDB admite la opción $vectorSearch filter para los siguientes operadores MQL:
Tipo | Operador de MQL |
|---|---|
Igualdad | |
Rango | |
En conjunto | |
Existencia | |
Lógica |
Nota
La opción $vectorSearch filter no admite otros operadores del query, operadores de canalización de agregación ni operadores de búsqueda de MongoDB Search.
Consideraciones de filtrado
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
$search.
Ejemplos
Requisitos previos
Antes de ejecutar estos ejemplos, realiza las siguientes acciones:
Añade el conjunto de datos a tu clúster.
Crea índices de MongoDB Vector Search para la colección. Para obtener instrucciones, consulta el procedimiento Crear un MongoDB Vector Search Index y copia las configuraciones de los ejemplos básicos o de filtro en el lenguaje que desees.
Nota
Si se usa mongosh, pegar el queryVector del código de muestra en el terminal podría tardar un poco dependiendo de la máquina.