对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

如何为向量搜索的向量嵌入创建索引

您可以使用 knnVector 类型对向量嵌入编制索引。向量字段可以表示为以下类型的数字数组:

  • BSON int32、int64 或 double 数据类型,用于使用 knnBeta 操作符进行查询。

  • BSON double 使用 $vectorSearch 阶段进行查询的数据类型。

您可以使用 knnBeta 操作符(现已弃用)和聚合管道中的 $vectorSearch 阶段来查询索引为 knnVector 的字段。

注意

不能使用Atlas用户界面中的MongoDB Search Visual Editor 来配置 knnVector 类型的字段。相反,请使用MongoDB搜索 JSON Editor 来配置 knnVector 类型的字段。

您还可以将MongoDB Vector Search 与通过Atlas CLI创建的本地Atlas部署结合使用。要学习;了解更多信息,请参阅创建本地Atlas部署。

您无法将文档数组内的字段或对象数组内的字段( MongoDB Search embeddedDocuments 类型)索引为 knnVector 类型。

The following is the JSON syntax for the knnVector type. Replace the default index definition with the following. To learn more about the fields, see Field Properties.

1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "<field-name>": {
6 "type": "knnVector",
7 "dimensions": <number-of-dimensions>,
8 "similarity": "euclidean | cosine | dotProduct"
9 }
10 }
11 }
12}

knnVector 类型具有以下选项:

选项
类型
必要性
用途

type

字符串

必需

标识此字段类型的人类可读标签。值必须是 knnVector。

dimensions

int

必需

向量维度数, MongoDB搜索在索引和查询时强制执行。此值不能大于 8192。

similarity

字符串

必需

用于搜索前 K 个最近邻的向量相似度函数。值可以是以下值之一:

  • euclidean — 测量向量两端之间的距离。这样您便可根据不同维度来衡量相似性。要了解更多信息,请参阅欧几里得。

  • cosine - 根据向量之间的角度衡量相似度。这可以让您衡量未按幅度缩放的相似度。您不能将零幅度向量与 cosine 一起使用。如要衡量余弦相似度,建议将向量归一化并改用 dotProduct。要了解详情,请参阅余弦。

  • dotProduct - measures similarity like cosine, but takes into account the magnitude of the vector. This allows you to efficiently measure similarity based on both angle and magnitude. To learn more, see Dot Product.

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

sample_mflix.embedded_movies 集合的以下索引定义为集合中所有动态可索引的字段建立动态索引,并将 plot_embedding 字段作为 knnVector 类型建立静态索引。plot_embedding 字段包含使用 OpenAI 的 text-embedding-ada-002 向量嵌入模型创建的向量嵌入。索引定义指定了 1536 个向量维度,并使用 euclidean 来衡量相似性。

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "plot_embedding": {
6 "type": "knnVector",
7 "dimensions": 1536,
8 "similarity": "euclidean"
9 }
10 }
11 }
12}

如果在集群上加载 示例数据,并为该集合创建了前面的 MongoDB Search 索引,则可以对该集合运行 $vectorSearch 查询。要了解有关可运行的示例查询的更多信息,请参阅 $vectorSearch 示例。

要将MongoDB 搜索索引迁移到向量类型,请将向量字段的索引定义中的 knnVector 类型替换为 vector 类型。

例子

要对 sample_mflix.embedded_movies集合的示例索引定义中的 plot_embedding字段使用 vector 类型,请将索引定义替换为以下内容:

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "plot_embedding": {
6 "type": "vector",
7 "dimensions": 1536,
8 "similarity": "euclidean"
9 }
10 }
11 }
12}

要对 vector 类型字段运行查询,必须使用vectorSearch(MongoDB搜索操作符),而不是knnBeta操作符。

注意

现有的 knnBeta 操作符 查询可以继续针对 vector 类型索引运行。迁移索引后,我们建议立即将 knnBeta 操作符查询迁移到 vectorSearch(MongoDB搜索操作符)。