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