Una consulta de búsqueda vectorial de MongoDB toma la forma de una canalización de agregación que utiliza $vectorSearchcomo 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 de vectores
Cuando define una etapa, puede utilizar $vectorSearch el exact campo para especificar si desea ejecutar una 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 la consulta sin escanear cada vector. Por lo tanto, la búsquedaANN es ideal para consultar grandes conjuntos de datos sin un filtrado excesivo.
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 su consulta.
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. |
Indexación de búsqueda vectorial de MongoDB
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
Puede usar vectorSearchScore como score expresión $meta solo después de la $vectorSearch etapa de canalización. Si usa vectorSearchScore después de cualquier otra consulta, MongoDB registra una advertencia a partir de MongoDB v..82
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.
Prefiltrado de búsqueda vectorial de MongoDB
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") } Puede utilizar el operador
$andMQL para especificar una matriz de filtros en una sola consulta.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 obtener 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
$searchetapa.
Ejemplos
Requisitos previos
Antes de ejecutar estos ejemplos, realiza las siguientes acciones:
Añade el conjunto de datos 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 búsqueda vectorial de MongoDB" y copie las configuraciones de los ejemplos básicos o de filtro en el idioma que desee.
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.