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 支持在运行MongoDB v6.0.11 、v7.0.2 或更高版本的 Atlas集群上进行 ANN搜索,并在运行MongoDB v..6 0167010、v 的集群上支持 ENN搜索。.7 3、v..2 或更高版本。您还可以将MongoDB Vector Search 与使用Atlas CLI创建的自管理或本地Atlas部署结合使用。

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 的向量,表示查询向量。

要了解有关生成 BSON binData 向量,子类型为float32int8int1 的更多信息,请参阅《如何摄取预量化向量》

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

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

只要向量子类型相同,您就可以使用全保真向量来查询您的嵌入。这仅在 binData 向量的子类型为 float32 时才有可能。如果您使用任何其他子类型(int8int1),MongoDB Search 将不会返回任何结果或错误。

score

对象

Optional

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

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

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

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

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

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

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

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

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

必须vector 类型的索引定义中为要筛选数据的字段建立索引。

您可以在搜索结果中包含每个文档的分数。请在 $meta 阶段指定 searchScore 值的 $project 表达式。您也可以为 scoreDetails 字段 $meta 表达式指定 searchScoreDetails 值,以了解分数明细。

要了解更多信息,请参阅结果中的文档进行评分返回得分详情。

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

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

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

您无法在MongoDB Search Playground $search中使用 操作符运行 查询。vectorSearch

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

后退

text

在此页面上