Docs 菜单
Docs 主页
/ /

vectorSearch (MongoDB搜索操作符)

vectorSearch操作符对指定字段中的向量嵌入执行 ANN ENN搜索。使用此操作符可在语义搜索的同时添加分析文本功能,例如模糊搜索、短语匹配、位置筛选、通配符模式匹配等。

vectorSearch 通过以下语法实现:

{
"$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 使用以下字段来构造查询:

字段
类型
必要性
说明

exact

布尔

Optional

如果已省略 numCandidates,则此为必填项。

该标志指定是运行 ENN 还是 ANN 搜索。值可以是以下值之一:

  • false - 运行 ANN 搜索

  • true - 运行 ENN 搜索

如果省略,则默认值为 false

MongoDB Vector Search 支持在运行 ANN 搜索 MongoDB 6.0.11、v7.0.2 或更高版本,ENN搜索在运行MongoDB v6.0.16、v7.0.10,v7.3.2,或更高版本。

filter

对象

Optional

MongoDB Search 操作符,用于根据元数据或特定搜索条件对文档进行预筛选。

要学习;了解更多信息,请参阅预过滤。

limit

Int

必需

要在结果中返回的文档数量(仅限 int)。如果指定 numCandidates,该值不能超过 numCandidates 的值。

在分片的集群上,您必须在 阶段之后使用$limit $search来限制结果中的文档数量。

numCandidates

Int

Optional

如果 exactfalse 或被省略,则此字段为必填字段。

搜索期间要使用的最近邻数量。值必须小于或等于 (<=) 10000。指定的数字不能小于要返回的文档数量 (limit)。

我们建议您指定一个至少比要返回的文档数(limit)大 20 倍的数字,以提高准确性。

这种过度请求模式是权衡 ANN 搜索延迟与召回率的推荐方案,建议根据具体数据集规模和查询需求调整此参数。

path

字符串

必需

要搜索的索引向量类型字段。

queryVector

整数或浮点数数组

必需

float32 的数组,BSON BinData 子类型为 float32 的向量,或 BSON BinData 子类型为 int1int8 的向量,表示查询向量。

要学习;了解有关生成子类型为 binDatafloat32int8 或 的BSONint1 向量的更多信息,请参阅如何摄取预量化向量。

大量大小必须与字段的索引定义中指定的向量维数 ()numDimensions 相匹配。

您必须使用用于嵌入数据的同一模型来嵌入查询。

只要向量子类型相同,您就可以使用全保真向量查询嵌入。这仅适用于子类型为 float32binData 向量。如果使用任何其他子类型(int8int1), MongoDB Search 不会返回任何结果或错误。

score

对象

Optional

分配给匹配搜索词结果的分数。使用以下选项之一修改分数:

  • boost将生成的分数乘以给定数字。

  • constant将结果分数替换为给定数字。

  • function:使用给定的表达式替换结果分数。

有关在查询中使用 score 的信息,请参阅对结果中的文档进行评分

您必须使用 vectorSearch操作符为要搜索的字段索引。您可以在MongoDB Search索引定义中对以下类型的字段索引:

  • 包含向量嵌入的字段。这是您在查询path 选项中指定的字段。

  • 用于预筛选文档的字段。这些是您在查询filter 选项中指定的字段。

您可以对文档进行预过滤,以缩小语义搜索的范围,并确保不会考虑所有向量进行比较。您可以在 filter字段中使用任何支持的MongoDB Search操作符来查询和过滤文档。

您必须在 vector类型的索引定义中对要过滤数据的字段索引。

您可以在搜索结果中包含每个文档的分数。在 searchScore阶段指定具有$project 值的 $meta表达式。您还可以为searchScoreDetails scoreDetails字段$meta表达式指定 值,以获取分数的详细分类。

要学习;了解更多信息,请参阅对结果中的文档进行评分并返回分数详细信息。

vectorSearchvectorSearch操作符必须是查询中的顶级操作符。因此,您不能在以下MongoDB Search 操作符中使用 操作符:

不能使用vectorSearch 操作符查询使用 vectorSearch 类型索引建立索引的字段。

不能将以下$search 选项与vectorSearch 操作符一起使用:

$searchvectorSearch您无法使用搜索测试器通过 操作符运行 查询。

以下示例使用示例数据中的sample_mflix.embedded_movies 集合。如果您加载示例数据并在集合上创建示例索引,则可以在替换查询中的 <connection-string>和 占位符后,对集合运行以下 ANN 和 ENN<index-name> 查询。

后退

text

在此页面上