定义
$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 阶段采用包含以下字段的文档:
字段 | 类型 | 必要性 | 说明 |
|---|---|---|---|
| 文档 | 必需 | 指定 |
| 字符串 | 必需 | 连接注册表中 Atlas 连接的名称。Atlas Stream Processing 在解析时拒绝任何其他连接类型。 |
| literal string | 必需 | 目标数据库的名称。 |
| literal string | 必需 | 包含 MongoDB 向量搜索索引的目标集合的名称。 |
| 字符串 | 必需 | 流式文档上用于搜索结果数组的输出字段。如果 MongoDB 向量搜索 未返回匹配文档,Atlas Stream Processing 会将此字段设置为空数组。 警告:如果此字段为空或与流元数据字段名称冲突,Atlas Stream Processing 将在启动时报告 |
| 数组 | 字段路径(Field Path)表达式 | 可选的 | 显式向量嵌入用于搜索匹配的文档。 |
| 文档 | 可选的 | 指定文本查询的文档,以进行 自动嵌入。 |
| string | 字段路径(Field Path)表达式 | 可选的 | 用于自动嵌入的查询文本。 |
| 字符串 | Optional | 嵌入模型 MongoDB 向量搜索用于将 当您省略 |
| 字符串 | 必需 | 要查询的 MongoDB 向量搜索 索引的名称。 |
| 字符串 | 必需 | 目标集合中的字段,其中包含用于搜索的向量嵌入。 |
| int | 可选的 | MongoDB 向量搜索在搜索过程中考虑的候选者数。除非 |
| int | 必需 | 要返回的最大结果数。不得超过 警告:如果 |
| 文档 | Optional | 在向量搜索之前应用的预过滤表达式。有关支持的操作符,请参阅 过滤器。 警告:如果 |
| 布尔 | Optional | 指定是否运行 近似最近邻 (ANN) 或 精确最近邻 (ENN) 搜索的标志。如果您省略 值可以是以下值之一:
默认值为 |
| 文档 | Optional | 包含 |
| 阵列 | Optional | Atlas Stream Processing 在将搜索结果附加到输入文档之前对其运行的其他聚合阶段。 |
| 文档 | Optional | Atlas Stream Processing 针对每个输入文档评估的变量。每个值可以是字面量、字段路径(Field Path)或 表达式。 |
行为
查询模式
$vectorSearch 支持两种互斥的查询模式:queryVector 用于 向量嵌入,query.text 用于 自动嵌入。在任何模式下,您都可以指定字面值或字段路径(Field Path)表达式,因此单个流处理器可以为每个输入文档发出不同的查询。
Error Handling
如果目标 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 向量搜索索引。