Definición
La etapa $vectorSearch enriquece cada documento de transmisión con los resultados de una query de búsqueda vectorial de MongoDB. Para cada documento de entrada, la etapa ejecuta una query $vectorSearch en una colección y adjunta los resultados a un campo que especifique.
Ubicación
$vectorSearch debe ser una etapa intermedia de tu pipeline. No lo utilices como $source o receptor de tu pipeline.
Sintaxis
La etapa de pipeline $vectorSearch tiene la siguiente forma de prototipo:
{ "$vectorSearch": { "from": { "connectionName": "<registered-atlas-connection>", "db": "<database>", "coll": "<collection>" }, "as": "<output-field>", "queryVector": [<number>, ...] | <expression>, "query": { "text": "<string>" | <expression> }, "model": "<embedding-model>", "index": "<vector-index-name>", "path": "<field-containing-vectors>", "numCandidates": <int>, "limit": <int>, "filter": { ... }, "exact": <bool>, "searchNodePreference": { "key": "<preference>" }, "pipeline": [ { $<aggregation-stage>: { ... } }, ... ], "let": { "<variable>": <expression>, . . . } }}La etapa $vectorSearch procesa un documento con los siguientes campos:
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| Documento | Requerido | Documento que especifica la colección de Atlas de destino que |
| string | Requerido | Nombre de una conexión de Atlas en su Registro de Conexiones. Atlas Stream Processing rechaza cualquier otro tipo de conexión en el momento del análisis. |
| string literal | Requerido | Nombre de la base de datos de destino. |
| string literal | Requerido | Nombre de la colección de destino que contiene el índice de búsqueda vectorial de MongoDB. |
| string | Requerido | Campo de salida en el documento de transmisión para el arreglo de resultados de la búsqueda. Si la búsqueda vectorial de MongoDB no devuelve ningún documento coincidente, Atlas Stream Processing establece este campo en un arreglo vacío. ADVERTENCIA: si este campo está vacío o choca con el nombre del campo de metadatos de la transmisión, Atlas Stream Processing informa de un error |
| arreglo | expresión de ruta de campo | Condicional | Incrustación vectorial explícita para buscar documentos coincidentes. |
| Documento | Condicional | Documento que especifica la query de texto para la incrustación automática. |
| string | expresión de ruta de campo | Condicional | Query de texto para usar para la incrustación automática. |
| string | Opcional | Modelo de incrustación que utiliza la búsqueda vectorial de MongoDB para convertir Cuando omite |
| string | Requerido | Nombre del índice de MongoDB búsqueda vectorial para la query. |
| string | Requerido | Campo en la colección de destino que contiene las incrustaciones vectoriales para buscar. |
| Int | Condicional | Número de candidatos que la búsqueda vectorial de MongoDB considera durante la búsqueda. Obligatorio a menos que |
| Int | Requerido | Número máximo de resultados a devolver. No debe exceder ADVERTENCIA: Si |
| Documento | Opcional | Expresión de prefiltro que se aplicará antes de la búsqueda vectorial. Para conocer los operadores compatibles, consulte Filtro. ADVERTENCIA: Si |
| booleano | Opcional | Indicador que especifica si se debe ejecutar la búsqueda de ANN o ENN. Proporcione este campo si omite El valor puede ser uno de los siguientes:
Se establece por defecto en |
| Documento | Opcional | Documento con un campo |
| arreglo | Opcional | Etapas de agregación adicionales que Atlas Stream Processing ejecuta en los resultados de la búsqueda, antes de adjuntarlos al documento de entrada. |
| Documento | Opcional | Variables que Atlas Stream Processing evalúa con cada documento de entrada. Cada valor puede ser un literal, una ruta de campo o una expresión. Las etapas |
Comportamiento
Modos de query
$vectorSearch admite dos modos de query mutuamente excluyentes: queryVector para incrustación de vectores y query.text para incrustación automática. En cualquier modo, puede especificar un valor literal o una expresión de ruta de campo, de modo que un único procesador de transmisión pueda emitir una query diferente para cada documento de entrada.
Error Handling
Si el índice de búsqueda vectorial de MongoDB de destino no existe, el procesador de transmisión entra en un estado de error cuando $vectorSearch se ejecuta por primera vez. Atlas Stream Processing informa de un error MongoServerError y deja de procesar documentos.
Si queryVector o query.text se evalúa con el tipo incorrecto en tiempo de ejecución, Atlas Stream Processing solo enruta el documento infractor a la fila de letra muerta, si está configurado, o lo descarta en caso contrario. El procesador de flujos sigue procesando documentos posteriores. Para el esquema de documento de DLQ, consulte fila de letra muerta.
Procesar resultados
Utilice pipeline para procesar aún más los resultados de la búsqueda antes de que Atlas Stream Processing los adjunte al documento de entrada. Atlas Stream Processing reenvía pipeline a MongoDB búsqueda vectorial textualmente. Para hacer referencia a un valor del documento de entrada dentro de pipeline, páselo a través de let y haga referencia a él como $$<variable>.
Ejemplos
Los siguientes ejemplos consultan el conjunto de datos sample_mflix, que contiene datos sobre películas y cines. Para ejecutarlos, cargue los datos de muestra en su clúster de Atlas y cree un índice de búsqueda vectorial de MongoDB en la colección embedded_movies.