对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

$vectorSearch 聚合阶段

$vectorSearch 阶段使用 MongoDB 向量搜索 查询的结果丰富每个流媒体文档。对于每个输入文档,该阶段会对集合运行 $vectorSearch 查询,并将结果添加到您指定的字段。

$vectorSearch 必须是管道的中间阶段。请勿将其用作管道的$source或汇集器。

$vectorSearch 管道阶段采用以下原型形式:

{ "$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>, . . . } }}

$vectorSearch 阶段采用包含以下字段的文档:

字段
类型
必要性
说明

from

文档

必需

指定 $vectorSearch 查询每个输入文档的目标 Atlas 集合的文档。

from.connectionName

字符串

必需

连接注册表中 Atlas 连接的名称。Atlas Stream Processing 在解析时拒绝任何其他连接类型。

from.db

literal string

必需

目标数据库的名称。

from.coll

literal string

必需

包含 MongoDB 向量搜索索引的目标集合的名称。

as

字符串

必需

流式文档上用于搜索结果数组的输出字段。如果 MongoDB 向量搜索 未返回匹配文档,Atlas Stream Processing 会将此字段设置为空数组。

警告:如果此字段为空或与流元数据字段名称冲突,Atlas Stream Processing 将在启动时报告 StreamProcessorInvalidOptions 错误。

queryVector

数组 | 字段路径(Field Path)表达式

可选的

显式向量嵌入用于搜索匹配的文档。

query

文档

可选的

指定文本查询的文档,以进行 自动嵌入。

query.text

string | 字段路径(Field Path)表达式

可选的

用于自动嵌入的查询文本。

model

字符串

Optional

嵌入模型 MongoDB 向量搜索用于将 query.text 转换为向量。仅在 query 旁边有效。

当您省略 model 时,MongoDB 向量搜索会使用目标 MongoDB 向量搜索索引定义中配置的模型。

index

字符串

必需

要查询的 MongoDB 向量搜索 索引的名称。

path

字符串

必需

目标集合中的字段,其中包含用于搜索的向量嵌入。

numCandidates

int

可选的

MongoDB 向量搜索在搜索过程中考虑的候选者数。除非 exact 为 true,否则为必填项。要了解如何选择值,请参阅 numCandidates 选择。

limit

int

必需

要返回的最大结果数。不得超过 numCandidates。

警告:如果 limit 超过 numCandidates,则每个文档在运行时都会失败,并显示 PlanExecutor 错误。

filter

文档

Optional

在向量搜索之前应用的预过滤表达式。有关支持的操作符,请参阅 过滤器。

警告:如果 filter 使用不支持的操作符,则每个文档都会在运行时失败,并报 PlanExecutor 错误。

exact

布尔

Optional

指定是否运行 近似最近邻 (ANN) 或 精确最近邻 (ENN) 搜索的标志。如果您省略 numCandidates,请提供此字段。

值可以是以下值之一:

默认值为 false。

searchNodePreference

文档

Optional

包含 key 字段的文档,Atlas Stream Processing 使用该字段将查询路由到特定搜索节点。key 值必须是非空字符串。

pipeline

阵列

Optional

Atlas Stream Processing 在将搜索结果附加到输入文档之前对其运行的其他聚合阶段。

let

文档

Optional

Atlas Stream Processing 针对每个输入文档评估的变量。每个值可以是字面量、字段路径(Field Path)或 表达式。pipeline 阶段可以将已解析的值引用为 $$<variable>。

$vectorSearch 支持两种互斥的查询模式:queryVector 用于 向量嵌入,query.text 用于 自动嵌入。在任何模式下,您都可以指定字面值或字段路径(Field Path)表达式,因此单个流处理器可以为每个输入文档发出不同的查询。

如果目标 MongoDB 向量搜索 索引不存在,则当 $vectorSearch 首次运行时,流处理器将进入错误状态。Atlas Stream Processing 报告 MongoServerError 错误,并停止处理文档。

如果 queryVector 或 query.text 在运行时评估为错误类型,Atlas Stream Processing 仅将有问题的文档路由到 死信队列(DLQ),如果已配置,否则将其删除。流处理器继续处理后续文档。关于 DLQ 文档模式,请参阅 死信队列(DLQ)。

在 Atlas Stream Processing 将搜索结果附加到输入文档之前,使用 pipeline 进一步处理搜索结果。Atlas Stream Processing 将 pipeline 原样转发到 MongoDB 向量搜索。要引用 pipeline 内的输入文档中的值,请通过 let 传递并将其引用为 $$<variable>。

以下示例查询 sample_mflix 数据集,其中包含电影和电影院的数据。要运行它们,请将样本数据加载到 Atlas 集群中,并在 embedded_movies 集合上创建 MongoDB 向量搜索索引。