Definição
O estágio $vectorSearch enriquece cada documento de streaming com resultados de uma query de pesquisa vetorial do MongoDB. Para cada documento de entrada, o estágio executa uma query $vectorSearch em uma coleção e anexa os resultados a um campo especificado.
Colocação
$vectorSearch deve ser um estágio intermediário do seu pipeline. Não o utilize como $source ou destino do seu pipeline.
Sintaxe
O estágio de pipeline do $vectorSearch tem a seguinte forma de protótipo:
{ "$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>, . . . } }}O estágio $vectorSearch recebe um documento com os seguintes campos:
Campo | Tipo | necessidade | Descrição |
|---|---|---|---|
| documento | Obrigatório | Documento que especifica a coleção Atlas de destino que |
| string | Obrigatório | Nome de uma conexão Atlas no seu registro de conexões. O Atlas Stream Processing rejeita qualquer outro tipo de conexão no momento da análise. |
| string literal | Obrigatório | Nome do banco de dados de destino. |
| string literal | Obrigatório | Nome da coleção de destino que contém o índice de pesquisa vetorial do MongoDB. |
| string | Obrigatório | Campo de saída no documento de streaming para o array de resultados da pesquisa. Se a pesquisa vetorial do MongoDB não retornar nenhum documento correspondente, o Atlas Stream Processing definirá esse campo como um array vazio. AVISO: Se este campo estiver vazio ou colidir com o nome do campo de metadados do fluxo, o Atlas Stream Processing relatará um erro |
| array | expressão de caminho do campo | Condicional | embedding de vetor explícito para pesquisar documentos correspondentes. |
| documento | Condicional | Documento que especifica a query de texto para embedding automático. |
| string | expressão de caminho do campo | Condicional | Query de texto a ser usada para auto-embedding. |
| string | Opcional | Modelo de embedding que a pesquisa vetorial do MongoDB usa para converter Quando você omite |
| string | Obrigatório | Nome do índice de pesquisa vetorial do MongoDB para query. |
| string | Obrigatório | Campo na coleção de destino que contém os embeddings de vetor a serem pesquisados. |
| int | Condicional | Número de candidatos que a pesquisa vetorial do MongoDB considera durante a pesquisa. Obrigatório, a menos que |
| int | Obrigatório | Número máximo de resultados a serem retornados. Não deve exceder AVISO: Se |
| documento | Opcional | Expressão de pré-filtro a ser aplicada antes da pesquisa vetorial. Para operadores compatíveis, consulte filtro. AVISO: Se |
| booleano | Opcional | Sinalizador que especifica se a pesquisa ANN ou ENN deve ser executada. Forneça este campo se você omitir O valor pode ser um dos seguintes:
Padrão é |
| documento | Opcional | Documento com um campo |
| array | Opcional | Estágios de agregação adicionais que o Atlas Stream Processing executa em relação aos resultados da pesquisa, antes de anexá-los ao documento de entrada. |
| documento | Opcional | Variáveis que o Atlas Stream Processing avalia em relação a cada documento de entrada. Cada valor pode ser um literal, um caminho do campo ou uma expressão. |
Comportamento
Modos de query
$vectorSearch suporta dois modos de query mutuamente exclusivos: queryVector para embedding de vetor e query.text para embedding automático. Em qualquer modo, você pode especificar um valor literal ou uma expressão de caminho do campo, para que um único processador de fluxo possa emitir uma query diferente para cada documento de entrada.
Error Handling
Se o índice de pesquisa vetorial do MongoDB de destino não existir, o processador de fluxo entrará em um estado de erro quando $vectorSearch for executado pela primeira vez. O Atlas Stream Processing relata um erro MongoServerError e interrompe o processamento de documentos.
Se queryVector ou query.text for avaliado como o tipo errado em tempo de execução, o Atlas Stream Processing encaminha apenas o documento infrator para a fila de mensagens não entregues (DLQ), se configurado, ou o descarta caso contrário. O processador de fluxo continua a processar documentos posteriores. Para o esquema de documento DLQ, consulte fila de mensagens não entregues (DLQ).
Processar resultados
Use pipeline para processar ainda mais os resultados da pesquisa antes que o Atlas Stream Processing os anexe ao documento de entrada. O Atlas Stream Processing encaminha pipeline para o MongoDB pesquisa vetorial literalmente. Para referenciar um valor do documento de entrada dentro de pipeline, passe-o por let e referencie-o como $$<variable>.
Exemplos
Os exemplos a seguir consultam o conjunto de dados sample_mflix, que contém dados sobre filmes e salas de cinema. Para executá-los, carregue os dados de amostra em seu cluster Atlas e crie um índice de pesquisa vetorial MongoDB na coleção embedded_movies.