如何为向量搜索的向量嵌入创建索引
您可以使用 knnVector
类型来索引向量嵌入。向量字段可以用以下类型的 数字 数组来表示:
BSON
int32
、int64
或double
数据类型,用于使用 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 部署。
查看 knnVector
类型限制
无法将文档数组内的字段或对象数组内的字段(Atlas Search embeddedDocuments 类型)作为 knnVector
类型建立索引。
为 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
字段属性
knnVector
类型具有以下选项:
选项 | 类型 | 必要性 | 用途 |
---|---|---|---|
| 字符串 | 必需 | 标识此字段类型的人类可读标签。值必须是 |
| int | 必需 | 向量维度数,Atlas Search 在索引和查询时会严格要求向量维度数保持一致。此值不能大于 |
| 字符串 | 必需 | 用于搜索前 K 个最近邻的向量相似度函数。值可以是以下值之一: |
尝试 knnVector
类型的示例
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 示例。