Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

vectorSearch (MongoDB Search Operador)

El operador vectorSearch realiza una búsqueda ANN o ENN en incrustaciones de vectores en el campo especificado. Usa este operador para añadir capacidades de análisis de texto como búsqueda difusa, coincidencia de frases, filtrado por ubicación, coincidencia de patrones comodín y mucho más junto con la búsqueda semántica.

vectorSearch tiene la siguiente sintaxis:

{
"$search": {
"index": "<index name>", // optional, defaults to "default"
"vectorSearch": {
"exact": true | false,
"filter": {<operator-specification>},
"limit": <number-of-results>,
"numCandidates": <number-of-candidates>,
"path": "<field-to-search>",
"queryVector": [<array-of-numbers>],
"score": {<options>}
}
}
}

vectorSearch utiliza los siguientes campos para construir una query:

Campo
Tipo
Necesidad
Descripción

exact

Booleano

Opcional

Esto es obligatorio si se omite numCandidates.

Indicador que especifica si se debe ejecutar la búsqueda de ENN o ANN. El valor puede ser uno de los siguientes:

  • false - para ejecutar la búsqueda de ANN

  • true - para ejecutar la búsqueda de ENN

Si se omite, es por defecto false.

MongoDB Vector Search admite la búsqueda ANN en clusters de Atlas que ejecutan MongoDB v6.0.11, v7.0.2, o posterior y ENN búsqueda en clústeres que ejecutan MongoDB v6.0.16, v7.0.10, v7.3.2, o posterior. También puedes usar la búsqueda vectorial de MongoDB con autogestionado o implementaciones locales de Atlas que crees con la CLI de Atlas.

filter

Objeto

Opcional

Operador de Búsqueda de MongoDB operator para prefiltrar documentos basados en metadatos o criterios específicos de búsqueda.

Para obtener más información, consulta Pre-Filter.

limit

Int

Requerido

Número de documentos (solo de tipo int) que se devolverán en los resultados. Este valor no puede superar el valor de numCandidates si especifica numCandidates.

En los clústeres fragmentados, debes usar $limit después de la etapa $search para limitar el número de documentos en los resultados.

numCandidates

Int

Opcional

Este campo es obligatorio si exact es false o si se omite.

Número de vecinos más cercanos a utilizar durante la búsqueda. El valor debe ser menor o igual a (<=) 10000. No puede especificar un número inferior al número de documentos a devolver (limit).

Recomendamos que especifique un número al menos 20 veces mayor que el número de documentos que se debe devolver (limit) para aumentar la precisión.

Este patrón de sobrepetición es la forma recomendada de equilibrar la latencia y el recall en las búsquedas de ANN, y recomendamos ajustar este parámetro según el tamaño específico del conjunto de datos y los requisitos de la query.

path

String

Requerido

Campo de tipo vector indexado para la búsqueda.

queryVector

Arreglo de enteros o flotantes

Requerido

Arreglo de números de float32, vectores BSON BinData con subtipo float32, o vectores BSON BinData con subtipo int1 o tipo int8 que representan el vector de queries.

Para obtener más información sobre cómo generar BSON binData vectores con subtipos float32, int8 o int1, consulta Cómo incorporar vectores pre-cuantificados.

El tamaño del arreglo debe coincidir con el número de dimensiones de vector (numDimensions) especificadas en la definición del índice para el campo.

Se debe incrustar la query con el mismo modelo que se usó para incrustar los datos.

Puedes query tus incrustaciones con vectores de fidelidad completa, mientras el subtipo del vector sea el mismo. Esto solo es posible con vectores binData con subtipo float32. Si usas cualquier otro subtipo (int8 o int1), MongoDB Search no devuelve ningún resultado ni error.

score

Objeto

Opcional

Puntuación asignada a los resultados de términos de búsqueda coincidentes. Utiliza una de las siguientes opciones para modificar el puntaje:

  • boostMultiplica la puntuación resultante por el número dado.

  • constant: reemplazar la puntuación del resultado por el número dado.

  • function: reemplazar el puntaje de resultados usando la expresión dada.

Para obtener información sobre cómo usar score en tu query, consulta Calificación de los Documentos en los Resultados.

Deberá indexar los campos a buscar utilizando el operador vectorSearch. Puedes indexar los siguientes tipos de campos en la definición del índice de MongoDB Search:

  • Campo que contiene embeddings vectoriales. Este es el campo que se especifica en la opción de query path.

  • Campos para pre-filtrar los documentos. Estos son los campos que especificas en la opción de query filter.

Puedes prefiltrar los documentos para acotar el alcance de tu búsqueda semántica. Utiliza cualquier operador de búsqueda de MongoDB compatible en el campo filter para consultar y filtrar los documentos.

Importante

Las **query**s filtradas suelen ser más lentas que una **query** no filtrada equivalente.

Debe indexar los campos con los que desea filtrar sus datos en la definición de índice para el tipo vector.

Puede incluir la puntuación de cada documento en los resultados de búsqueda. Especifica la expresión $meta con el valor searchScore en la etapa $project. También puede especificar el valor searchScoreDetails para el campo scoreDetails de la expresión $meta para obtener un desglose detallado de la puntuación.

Para aprender más, se puede consultar Puntúe los documentos en los resultados y Detalles de la puntuación.

El operador vectorSearch debe ser el operador de nivel superior en las consultas. Por lo tanto, no puedes usar el operador vectorSearch dentro de los siguientes operadoresde búsqueda de MongoDB.

No se puede usar el operador vectorSearch para buscar en campos indexados con un índice de tipo vectorSearch.

No se pueden usar las siguientes opciones de $search con el operador vectorSearch:

No se pueden ejecutar consultas $search con el operador vectorSearch en el entorno de pruebas de MongoDB Search.

Los siguientes ejemplos utilizan la colección sample_mflix.embedded_movies de los datos de muestras. Si cargas los datos de muestra y creas el índice de muestra en la colección, puedes ejecutar las siguientes ANN y ENN queries contra la colección después de reemplazar los marcadores de posición <connection-string> y <index-name> en las queries.