如何为向量搜索的字段编制索引
您可以使用 vectorSearch
类型为字段编制索引,以运行$vectorSearch
查询。 您可以为要查询的向量嵌入定义索引,以及要用于预筛选数据的布尔值、数值或字符串值。 筛选数据有助于缩小语义搜索的范围,并确保在比较时(例如在多租户环境中)不考虑某些向量嵌入。
您可以使用 Atlas 用户界面和 Atlas Administration API 创建 Atlas Vector Search 索引。
注意
不能使用已弃用的knnBeta操作符来查询使用vectorSearch
类型索引定义建立索引的字段。
考虑因素
您无法在vectorSearch
类型索引定义中对文档数组内的字段或对象数组内的字段进行索引。您可以使用点表示法对文档内的字段进行索引。
语法
以下语法定义了vectorSearch
索引类型:
1 { 2 "fields":[ 3 { 4 "type": "vector", 5 "path": "<field-to-index>", 6 "numDimensions": <number-of-dimensions>, 7 "similarity": "euclidean | cosine | dotProduct" 8 }, 9 { 10 "type": "filter", 11 "path": "<field-to-index>" 12 }, 13 ... 14 ] 15 }
关于vector
类型
向量字段必须包含 BSON double
数据类型的数字数组,才能使用$vectorSearch
管道阶段进行查询。 您必须在fields
数组内将向量字段索引为vector
类型。
以下语法定义了vector
字段类型:
1 { 2 "fields":[ 3 { 4 "type": "vector", 5 "path": <field-to-index>, 6 "numDimensions": <number-of-dimensions>, 7 "similarity": "euclidean | cosine | dotProduct" 8 }, 9 ... 10 ] 11 }
关于filter
类型
您可以选择对布尔值、数值、日期和字符串值进行索引,以对数据进行预过滤。筛选数据有助于缩小语义搜索的范围,并确保不会考虑所有向量进行比较。您必须使用fields
数组内的filter
类型为布尔值、数字、日期和字符串字段建立索引。
以下语法定义了filter
字段类型:
1 { 2 "fields":[ 3 { 4 "type": "vector", 5 ... 6 }, 7 { 8 "type": "filter", 9 "path": "<field-to-index>" 10 }, 11 ... 12 ] 13 }
注意
对数据进行预筛选不会影响 Atlas Vector Search 使用$vectorSearchScore
进行$vectorSearch
查询返回的分数。
Atlas Vector Search 索引字段
Atlas Vector Search 索引定义包含以下字段:
选项 | 类型 | 必要性 | 用途 | ||||||
---|---|---|---|---|---|---|---|---|---|
fields | 文档数组 | 必需 | 要索引的向量和筛选器字段,每个文档一个。至少一个文档必须包含向量字段的字段定义。您还可以选择对数字、布尔值和字符串字段进行索引(每个文档一个),以对数据进行预过滤。 | ||||||
fields.type | 字符串 | 必需 | 用于为
| ||||||
fields.path | 字符串 | 必需 | 要索引的字段的名称。对于嵌套字段,使用点表示法指定嵌入式字段的路径。不能为包含两个连续点 (
| ||||||
fields.numDimensions | int | 必需 | Atlas Vector Search 在索引时和查询时实施的向量维度数。您必须指定一个小于或等于 4096 的值。只能为vector 类型字段设置此字段。 | ||||||
fields.similarity | 字符串 | 必需 | 用于搜索前 K 个最近邻域的向量相似度函数。您只能为
注意如果对幅度进行归一化,则 |
创建和管理 Atlas Vector Search 索引
您可以从 Atlas 用户界面和 Atlas Administration API 创建和管理 Atlas Vector Search 索引。要了解详情,请参阅:
节点状态
创建 Atlas Vector Search 索引时, Status列会显示集群主节点上索引的当前状态。 单击状态下方的View status details链接可查看集群所有节点上索引的状态。
当 Status 列显示为 Active时,索引已准备就绪,可供使用。在其他状态下,对索引的查询可能会返回不完整的结果。
状态 | 说明 |
---|---|
未启动 | Atlas 尚未开始构建索引。 |
初始化同步(Resumable Initial Sync) | Atlas 正在构建索引或在编辑后重新构建索引。当该索引处于以下状态时:
|
活跃的 | 索引已准备就绪。 |
正在恢复 | 复制遇到错误。当当前复制点在 mongod oplog 上不再可用时,通常会出现此状态。您仍然可以查询现有索引,直到它更新并且其状态变为Active 。使用View status details模式窗口中的错误来解决问题。要了解更多信息,请参阅修复 Atlas Search 问题。 |
已失败 | Atlas 无法构建索引。使用 View status details(查看状态详细信息)模式窗口中的错误来解决问题。要了解更多信息,请参阅修复 Atlas Search 问题。 |
正在删除 | Atlas 正在从集群节点中删除索引。 |
当 Atlas 构建索引时以及构建完成后,Documents 列会显示已完成索引的文档的百分比和数量。该列还会显示集合中的文档总数。