重要
在我们准备从私有预览过渡到公开预览时,text 类型的MongoDB Vector Search 索引已弃用。要学习;了解更多信息,请参阅预览功能。
您可以将MongoDB Vector Search 配置为自动生成和管理集群中文本数据的向量嵌入。您可以在 M10 或更高版本的Atlas 集群中创建一键式AI语义搜索索引,并使用 Voyage AI嵌入模型,从而通过向量简化索引、更新和查询。
启用自动嵌入后, MongoDB Vector Search 会在索引时为Atlas集合中的指定文本字段使用指定的嵌入模型自动生成嵌入,并在查询时根据自动嵌入的索引字段为查询中的文本 string 自动生成嵌入。
Considerations
重要
您可以在云提供商的任何 M10 或更高级别的集群上使用MongoDB Vector Search 自动嵌入。但是,处理生成向量嵌入的推理进程的服务在 Google Cloud 上运行。这意味着,无论集群的云提供商如何,您的数据都会发送到 Google Cloud 进行嵌入生成和检索。我们提供企业级安全,因此,您的数据仅存储在您的集群中。
嵌入模型在共享的多租户推理平台上运行。因此,在预览期间,您必须使用文档少于 100k 的数据集,并仅出于功能评估而非负载测试而运行查询。如果您有更高限制的使用案例,请联系您的客户团队。
虽然您的工作负载没有硬性速率限制,但有全局限制。如果您的查询返回速率限制错误(错误 409),请在应用程序代码中执行退避并重试。这使您的应用程序能够从容处理速率限制并确保持续运行。
先决条件
要使用自动嵌入启用向量搜索,您必须启用以下条件:
M10或更高级别的集群一个集合,其中包含您希望为其索引以实现自动嵌入的文本字段。
以下客户端之一:
用于创建索引的 Atlas UI
mongosh用于创建索引和运行查询节点驱动程序 6.6.0 或更高版本,用于创建索引和运行查询
Python驱动程序 4.7 或更高版本,用于创建索引和运行查询
用于自动嵌入的MongoDB Vector Search 索引
以下部分描述了用于启用自动生成文本字段嵌入的MongoDB Vector Search索引语法和字段,并引导您完成为自动嵌入配置索引的步骤。
必需的访问权限
您需要 Project Data Access Admin 或更高角色才能创建和管理MongoDB Vector Search 搜索索引。
索引事务语法
以下是启用自动生成嵌入的语法:
1 { 2 "fields": [ 3 { 4 "type": "text", 5 "path": "<field-name>", 6 "model": "voyage-3-large | voyage-3.5 | voyage-3.5-lite" 7 } 8 ] 9 }
索引字段
索引定义中需要以下字段:
字段 | 类型 | 说明 |
|---|---|---|
| 字符串 | 字段的类型。对于自动嵌入,该值必须为 |
| 字符串 | 集合中您想要为自动嵌入索引的字段的名称。 |
| 字符串 | 用于为索引生成嵌入的 Voyage AI 嵌入模型。您可以指定以下模型之一:
创建索引后,如果您随后更改嵌入模型, MongoDB Vector Search 会为数据集生成新的嵌入。在MongoDB Vector Search 生成嵌入时,您可以使用旧的嵌入继续进行查询。当旧的嵌入替换为新的嵌入模型中的嵌入时, MongoDB Vector Search 会删除旧的嵌入。 |
Considerations
自动嵌入的索引字段与以下 vector 类型索引字段互斥:
numDimensionssimilarityquantization
如果您的集合已经包含嵌入,则必须使用 vector 类型字段来为嵌入创建索引。要了解有关使用嵌入对字段进行索引的更多信息,请参阅如何对 Vector Search 字段进行索引。
如果您想要为自动生成嵌入的文本字段建立索引,并使用您自己的嵌入为字段索引,则可以同时使用 text 和 vector 类型创建索引。MongoDB Vector Search 将仅自动为针对索引为 text 类型的字段的查询生成嵌入。您必须在查询中指定嵌入,才能搜索索引为 vector 类型的字段。
您还可以使用MongoDB Vector Search filter 类型对字段进行索引以预筛选数据。
重要
筛选后的查询通常比其他等效的未筛选查询慢。
要学习;了解有关预过滤数据的更多信息,请参阅关于 filter 类型。
为自动嵌入创建索引
以下过程将演练在MongoDB Vector Search索引中启用自动嵌入的步骤。如果加载了 sample_mflix.movies 数据集,则过程中的示例将演示如何为集合中的 fullplot字段启用自动嵌入。
带自动嵌入功能的MongoDB Vector Search 查询
在创建具有自动嵌入的索引后,您可以对索引字段运行文本查询。MongoDB Vector Search 使用索引中指定的相同嵌入模型,自动为查询中的文本 string 生成嵌入。它使用嵌入来搜索索引中与指定查询文本在语义上相似的文档。
以下部分描述了 $vectorSearch 管道语法和字段,用于根据为自动嵌入建立索引的字段自动为查询文本生成嵌入,并演示如何对为自动嵌入建立索引的字段运行语义搜索查询。
查询语法
以下语法演示了如何对针对自动嵌入进行了索引的字段运行查询:
1 { 2 "$vectorSearch": { 3 "index": "<index-name>", 4 "limit": <number-of-results>, 5 "numCandidates": <number-of-candidates>, 6 "path": "<field-to-search>", 7 "query": "<query-string>" 8 } 9 }
查询字段
使用自动嵌入的MongoDB Vector Search查询需要以下字段:
字段 | 类型 | 必要性 | 说明 |
|---|---|---|---|
| 布尔 | 可选的 | 如果省略 该标志指定是运行 ENN 还是 ANN 搜索。值可以是以下值之一:
如果省略,则默认值为 |
| 字符串 | 必需 | 要使用的MongoDB Vector Search索引的名称。 如果索引名称拼写错误或者指定的索引在集群上尚不存在,MongoDB Vector Search 不会返回结果。 |
| 数字 | 必需 | 要在结果中返回的文档数量(仅限 |
| 数字 | 可选的 | 如果 搜索期间要使用的最近邻数量。值必须小于或等于 ( |
| 字符串 | 必需 | 要搜索的索引向量类型字段。 |
| 字符串 | 必需 | 用于自动生成嵌入并执行语义搜索的文本。 |
Considerations
您可以对近似最近邻 (ANN)或精确最近邻 (ENN)查询运行于索引字段。要学习、了解更多信息,请参阅 近似最近邻 (ANN) 搜索和 精确最近邻 (ENN) 搜索。
您不能在查询中针对为自动嵌入建立索引的字段指定向量嵌入。相反,您必须对该字段运行自然语言查询。当您针对自动嵌入的索引字段运行自然语言查询时, MongoDB Vector Search 使用与索引字段相同的嵌入模型自动为查询文本生成嵌入。然后,它使用生成的嵌入对索引字段执行语义搜索。
您可以选择在查询中指定 filter 字段,以对 MongoDB 向量搜索 执行语义搜索的文档进行预过滤。要了解更多信息,请参阅MongoDB 向量搜索 过滤器。
您还可以选择检索结果中文档的分数。要学习,了解更多信息,请参阅MongoDB 向量搜索 Scoring。