对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs 菜单

如何索引向量字段

您可以使用 vector 类型对向量嵌入编制索引。向量字段必须包含以下类型的数字数组:

  • BSON int32,int64,或 double 数据类型

  • BSON double 数据类型

您可以在 聚合管道中使用 vectorSearch 操作符(类似于$vectorSearch $search阶段)来查询索引为vector 类型的字段。

适用以下限制:

  • 您无法将包含对象数组的字段(MongoDB 搜索 embeddedDocuments 类型)索引为 vector 类型。

  • 您无法在包含 vector 类型的索引定义中将 storedSource 设置为 true。相反,使用 include 指定要存储在 mongot 上的字段,或使用 exclude 从存储中排除 vector 类型的字段。

  • 您不能使用 $vectorSearch 阶段来查询索引为 vector 类型的字段。

  • 您可以在 MongoDB Search Playground 中将字段索引为 vector 类型。

MongoDB Search vector 类型采用以下参数:

选项
类型
必要性
说明

type

vector

必需

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

numDimensions

Int

必需

MongoDB Search 在索引时和查询时强制执行的向量维度数。您只能为 vector 类型字段设置此字段。您必须指定小于或等于 8192 的值。

对于索引量化向量或 BinData,您可以指定以下值之一:

  • 1 为 int8 向量的 8192 进行摄取。

  • 用于摄取的 int1 向量的 8 倍数。

  • 1 为 8192(表示 binData(float32))和 array(float32) 向量(表示自动标量量化)。

  • binData(float32) 和 array(float32) 向量的 8 的倍数,用于自动二进制量化。

您选择的嵌入模型决定了向量嵌入的维数,某些模型对于输出的维数有多个选项。要学习;了解更多信息,请参阅选择创建嵌入的方法。

similarity

字符串

必需

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

您可以指定以下值之一:

  • euclidean — 测量向量两端之间的距离。

  • cosine — 根据向量之间的角度测量相似度。

  • dotProduct - 测量类似于 cosine 的相似度,但考虑了向量的幅度。

要学习;了解更多信息,请参阅关于相似度函数。

quantization

字符串

Optional

向量的自动向量量化类型。仅当嵌入是 float 或 double 向量时才使用此设置。

您可以指定以下值之一:

  • none - 表示向量嵌入不会自动量化。 如果您有要摄取的预量化向量,请使用此设置。 如果省略,则为默认值。

  • scalar - 表示标量量化,将值转换为 1 字节整数。

  • binary - 表示二进制量化,将值转换为单个比特。要使用此值,numDimensions 必须是 8 的倍数。

    如果精度至关重要,请选择 none 或 scalar 而不是 binary。

要学习;了解更多信息,请参阅About Quantization.

indexingMethod

字符串

Optional

向量字段的索引结构。值可以是:

  • hnsw - 用于基于图表的索引,其中连接了相似的向量

  • flat - 适用于平面、非图表、索引

If omitted, defaults to hnsw. If you specify hnsw, MongoDB Vector Search performs ANN search over the Hierarchical Navigable Small Worlds graph and ENN search over full-fidelity vectors. You can also specify hnswOptions.

If you specify flat, MongoDB Vector Search performs a full scan over full-fidelity or quantized vectors. During an ANN search, MongoDB Vector Search ignores the settings for numCandidates. For ENN search, MongoDB Vector Search performs a full scan over full-fidelity vectors.

hnswOptions

对象

Optional

用于分层导航小世界图表构建的参数。如果省略,将使用 maxEdges 和 numEdgeCandidates 参数的默认值。

重要提示:此功能可作为预览功能使用。修改默认值可能会对您的 MongoDB Search 索引和查询产生负面影响。

hnswOptions.
maxEdges

Int

Optional

在分层可导航小世界图中,一个节点最多可以拥有的边(或连接)数量。值可以在 16 到 64 之间(含)。如果未指定,则默认值为 16。例如,对于值 16,在分层可导航小世界图的每一层,每个节点最多可以有十六个出边。

较高的数值会提升召回率(搜索结果的准确性),因为图表的连接性更好。不过,这也会增加每个图表节点需要评估的邻居数量,从而增加查询和索引时间,并且需要更多内存来存储分层导航小世界图中每个连接的额外节点。

hnswOptions.
numEdgeCandidates

Int

Optional

类似于查询时的 numCandidates,此参数控制要评估的最大节点数,以找到连接到新节点的最近邻居。值可以在 100 到 3200 之间(含)。如果未指定,值默认为 100。

较高的数值可以生成具有高质量连接的图,从而提升搜索质量(召回率),但也会增加查询延迟。

以下索引定义示例在sample_mflix.embedded_movies 示例数据 中使用了 个集合。加载集合后,您可以使用以下示例将 plot_embedding_voyage_3_large 字段索引为 vector 类型,以便使用 vectorSearch (MongoDB Search 操作符)运行查询。有关针对此索引运行的示例查询,请参阅示例。

此索引定义使用动态索引所有可索引字段,使用默认typeSet,并使用以下设置将plot_embedding_voyage_3_large字段索引为vector类型:

  • 2048 维度数

  • dotProduct 相似度函数

  • scalar 量化

  • hnsw (默认)索引方法