定义
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 使用以下字段来构造查询:
字段 | 类型 | 必要性 | 说明 |
|---|---|---|---|
| 布尔 | Optional | 如果已省略 该标志指定是运行 ENN 还是 ANN 搜索。值可以是以下值之一:
如果省略,则默认值为 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部署结合使用。 |
| 对象 | Optional | |
| Int | 必需 | |
| Int | Optional | 如果 搜索期间要使用的最近邻数量。值必须小于或等于 ( 我们建议您指定一个至少比要返回的文档数( 这种过度请求模式是权衡 ANN 搜索延迟与召回率的推荐方案,建议根据具体数据集规模和查询需求调整此参数。 |
| 字符串 | 必需 | 要搜索的索引向量类型字段。 |
| 整数或浮点数的数组 | 必需 |
要了解有关生成 BSON 数组大小必须与字段的索引定义中指定的向量( 您必须使用用于嵌入数据的同一模型来嵌入查询。 只要向量子类型相同,您就可以使用全保真向量来查询您的嵌入。这仅在 |
| 对象 | Optional | 分配给匹配搜索词结果的分数。使用以下选项之一修改分数:
有关在查询中使用 |
行为
MongoDB搜索索引
必须使用 vectorSearch 操作符索引要搜索的字段。您可以在 MongoDB 搜索索引定义中为以下类型的字段建立索引:
包含向量嵌入的字段。这是您在查询
path选项中指定的字段。用于预过滤器文档的字段。这些是您在查询
filter选项中指定的字段。
预过滤器
您可以预过滤文档,以缩小语义搜索的范围,并确保不会考虑将所有向量进行比较。您可以在 filter 字段中使用任何支持的 MongoDB 搜索操作符来查询和过滤文档。
您必须在 vector 类型的索引定义中为要筛选数据的字段建立索引。
评分
您可以在搜索结果中包含每个文档的分数。请在 $meta 阶段指定 searchScore 值的 $project 表达式。您也可以为 scoreDetails 字段 $meta 表达式指定 searchScoreDetails 值,以了解分数明细。
要了解更多信息,请参阅结果中的文档进行评分和返回得分详情。
vectorSearch 操作符限制
vectorSearch 操作符必须是查询中的顶级操作符。因此,您不能在以下 MongoDB Search 操作符中使用 vectorSearch 操作符:
不能使用 vectorSearch 操作符查询使用 vectorSearch 类型索引的字段。
您不能将以下 $search 选项与 vectorSearch 操作符一起使用:
您无法在MongoDB Search Playground $search中使用 操作符运行 查询。vectorSearch
示例
以下示例使用示例数据中的 sample_mflix.embedded_movies 集合。如果您加载示例数据并在集合上创建示例索引,则可以在替换查询中的 <connection-string> 和 <index-name> 占位符后,对集合运行以下近似最近邻 (ANN) 和精确最近邻 (ENN) 查询。