Docs 菜单
Docs 主页
/ /

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

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

  • BSON int32int64double 数据类型,用于使用 knnBeta 操作符进行查询。

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

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

注意

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

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

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

以下是 knnVector 类型的 JSON 语法。将默认索引定义替换为以下内容。要了解有关字段的更多信息,请参阅字段属性

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 - 测量类似于 cosine 的相似度,但考虑了向量的幅度。这使您能够根据角度和幅度有效地衡量相似性。要学习;了解更多信息,请参阅点积。

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

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搜索索引,则可以对此集合运行$vectorSearch查询。要学习;了解有关可以运行的示例查询的详情,请参阅 $vectorSearch 示例。

后退

geo

在此页面上