Docs 菜单
Docs 主页
/
MongoDB Atlas
/ /

如何为向量搜索的字段编制索引

在此页面上

  • 考虑因素
  • 语法
  • 关于 vector类型
  • 关于filter类型
  • Atlas Vector Search 索引字段
  • 创建和管理 Atlas Vector Search 索引
  • 节点状态

您可以使用 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}

向量字段必须包含 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}

您可以选择对布尔值、数值、日期和字符串值进行索引,以对数据进行预过滤。筛选数据有助于缩小语义搜索的范围,并确保不会考虑所有向量进行比较。您必须使用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 索引定义包含以下字段:

选项
类型
必要性
用途
fields
文档数组
必需
要索引的向量和筛选器字段,每个文档一个。至少一个文档必须包含向量字段的字段定义。您还可以选择对数字、布尔值和字符串字段进行索引(每个文档一个),以对数据进行预过滤。
fields.type
字符串
必需

用于为$vectorSearch的字段编制索引的字段类型。您可以指定以下值之一:

  • vector - 适用于包含向量嵌入的字段。

  • filter - 适用于包含布尔值、数字值或字符串值的字段。

fields.path
字符串
必需

要索引的字段的名称。对于嵌套字段,使用点表示法指定嵌入式字段的路径。不能为包含两个连续点 ( . ) 的字段名称和以点 ( . ) 结尾的字段名称编制索引。例如,Atlas Vector Search支持对以下字段名称进行索引:

foo..bar
字段名称有两个连续的点。
foo_bar.
字段名称以点结尾。
fields.numDimensions
int
必需
Atlas Vector Search 在索引时和查询时实施的向量维度数。您必须指定一个小于或等于4096的值。只能为vector类型字段设置此字段。
fields.similarity
字符串
必需

用于搜索前 K 个最近邻域的向量相似度函数。您只能为vector类型字段设置此字段。值包括:

  • euclidean — 测量向量两端之间的距离。该值允许您根据不同的维度来衡量相似性。要了解详情,请参阅 欧几里得。

  • cosine — 根据向量之间的角度测量相似度。通过该值,您可以衡量不按幅度缩放的相似度。不能将零幅度向量与cosine 一起使用。要衡量余弦相似度,我们建议您对向量进行归一化并改用dotProduct 。要了解更多信息,请参阅 余弦。

  • dotProduct - 与cosine 类似的测量值,但考虑了向量的幅度。通过该值,您可以根据角度和幅度有效地衡量相似度。要使用dotProduct ,您必须在索引时和查询时将向量规范化为单位长度。要了解更多信息,请参阅 点积。

注意

如果对幅度进行归一化,则 cosinedotProduct 在衡量相似性方面几乎相同。

您可以从 Atlas 用户界面和 Atlas Administration API 创建和管理 Atlas Vector Search 索引。要了解详情,请参阅:

创建 Atlas Vector Search 索引时, Status列会显示集群主节点上索引的当前状态。 单击状态下方的View status details链接可查看集群所有节点上索引的状态。

Status 列显示为 Active时,索引已准备就绪,可供使用。在其他状态下,对索引的查询可能会返回不完整的结果。

状态
说明
未启动
Atlas 尚未开始构建索引。
初始化同步(Resumable Initial Sync)

Atlas 正在构建索引或在编辑后重新构建索引。当该索引处于以下状态时:

  • 对于新索引,Atlas Vector Search 在索引构建完成之前不会提供查询服务。

  • 对于现有索引,可继续使用旧索引进行现有查询和新查询,直到索引重建完成。

活跃的
索引已准备就绪。
正在恢复
复制遇到错误。当当前复制点在mongod oplog 上不再可用时,通常会出现此状态。您仍然可以查询现有索引,直到它更新并且其状态变为Active 。使用View status details模式窗口中的错误来解决问题。要了解更多信息,请参阅修复 Atlas Search 问题。
已失败
Atlas 无法构建索引。使用 View status details(查看状态详细信息)模式窗口中的错误来解决问题。要了解更多信息,请参阅修复 Atlas Search 问题。
正在删除
Atlas 正在从集群节点中删除索引。

当 Atlas 构建索引时以及构建完成后,Documents 列会显示已完成索引的文档的百分比和数量。该列还会显示集合中的文档总数。

← 创建和管理 Atlas Vector Search 索引