Docs 菜单
Docs 主页
/
MongoDB Atlas
/ / / /

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

在此页面上

  • 查看 knnVector 类型限制
  • knnVector 类型定义索引
  • 配置 knnVector 字段属性
  • knnVector 类型使用示例

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

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

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

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

注意

不能使用 Atlas 用户界面中的Atlas Search Visual Editor 来配置 knnVector 类型的字段。而应使用 Atlas Search JSON Editor 来配置 knnVector 类型的字段。

您还可以将 Atlas Vector Search 与通过 Atlas CLI 创建的本地 Atlas 部署结合使用。要了解详情,请参阅创建本地 Atlas 部署

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

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

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

knnVector 类型具有以下选项:

选项
类型
必要性
用途
type
字符串
必需
标识此字段类型的人类可读标签。值必须是 knnVector
dimensions
int
必需
向量维度数,Atlas Search 在索引和查询时会严格要求向量维度数保持一致。此值不能大于 4096
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}

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

后退

geo