Atlas Vector Search 概述
您可以使用 Atlas Vector Search 对存储在 Atlas 中的数据执行向量搜索。向量搜索允许您根据语义含义而非仅仅关键字匹配项来查询数据,从而帮助您检索到更相关的搜索结果。它可让您的 AI 驱动式应用程序支持各种用例,例如语义搜索、混合搜索和生成式搜索,其中包括 RAG。
通过将 Atlas 用作矢量数据库,您可无缝地为矢量数据以及 Atlas 中的其他数据创建索引。如此一来,您便可对集合中的字段进行过滤,并对向量数据执行向量搜索查询。您还可将向量搜索与全文搜索查询相结合,以便为您的用例返回最相关的结果。您可将 Atlas Vector Search 与主流 AI 框架和服务相集成,以在您的应用程序中轻松实现向量搜索。
注意
Atlas Vector Search 支持在运行 MongoDB 6.0.11、7.0.2 或更高版本的集群上进行 ANN 搜索,并在运行 MongoDB 6.0.16、7.0.10、7.3.2 或更高版本的集群上进行 ENN 搜索。
什么是向量搜索?
向量搜索是一种根据数据语义或潜在含义返回结果的搜索方法。与查找文本匹配的传统全文搜索不同,向量搜索可在多维空间中查找与搜索查询接近的向量。向量越接近您的查询,它们的含义就越相似。
通过解释搜索查询和数据的含义,向量搜索可让您考虑搜索者的意图和搜索上下文,以检索出更相关的结果。
例如,如果您搜索了词语“红色水果”,则全文搜索仅返回显式包含这些关键字的数据。但是,语义搜索可能会返回含义相似的数据,例如苹果或草莓等红色水果。
用例
Atlas Vector Search 支持以下向量搜索用例:
语义搜索:使用 ANN 或 ENN 搜索算法,根据语义相似性查询向量嵌入。
混合搜索:结合语义搜索和全文搜索查询的结果。要了解更多信息,请参阅 使用 Atlas Vector Search 和 Atlas Search 执行混合搜索。
生成式搜索:通过将 Atlas 用作向量数据库,您可以使用 Atlas Vector Search 为自然语言处理 (NLP)、机器学习 (ML) 和生成式 AI 应用程序提供支持。具体而言,您可通过执行以下操作来实现检索增强生成 (RAG):
将数据导入 Atlas。
使用 Atlas Vector Search 检索相关文档。
通过使用 LLM 对您的数据生成响应。
要了解更多信息,请参阅使用 Atlas Vector Search 进行 RAG。
AI 集成
您可将 Atlas Vector Search 与 OpenAI、AWS 和 Google 等 AI 提供商提供的常用嵌入模型和聊天模型一起使用。MongoDB 和合作伙伴还提供特定的产品集成,以帮助您在 AI 驱动式应用程序中利用 Atlas Vector Search。这些集成包括内置工具和库,而它们可帮助您全程实现 RAG。
要了解更多信息,请参阅将 Vector Search 与 AI 技术集成。
关键概念
- 向量
向量是一组数字,代表多个维度的数据。向量可以表示任何类型的数据,包括文本、图像、音频数据以及非结构化数据。通过测量向量之间的距离,可以确定语义相似性。
向量维数是指数组中元素的数量,因此它也指在其中绘制向量的向量空间内的维度数量。
具体来说,Atlas Vector Search 使用密集向量,这是一种有利于更小的存储和语义丰富性的高维向量。与稀疏向量相反,密集向量可以包含更多数据,这使得 Atlas Vector Search 能够捕捉更复杂的关系。
- 向量嵌入
向量嵌入是指用于表示数据的向量。这些嵌入可以捕获数据中有意义的关系,并启用语义搜索和检索等任务。您可通过嵌入模型来传递数据,从而创建向量嵌入;同时,还可将这些嵌入作为文档中的字段存储在 Atlas 中。
Atlas Vector Search 通过确定与查询向量距离最接近的向量嵌入来确定语义相似性。
要了解更多信息,请参阅如何创建向量嵌入。
- 内嵌模型
嵌入模型是用于将数据转换为向量嵌入的算法。为此,嵌入模型使用 LLM(在大量数据上训练的机器学习模型)来生成捕获数据语义的向量嵌入。
您选择的嵌入模型决定了您的向量嵌入的维度。您必须将这些维度指定为 Atlas Vector Search 索引中的某一字段。
嵌入模型因其训练方式而有所不同。因此,不同模型会根据您的数据和用例提供不同的优势。要了解更多信息,请参阅选择嵌入式模型。
Atlas Vector Search 索引
要在 Atlas 中对数据执行向量搜索,您必须创建 Atlas Vector Search 索引。Atlas Vector Search 索引独立于其他数据库索引,用于在查询时有效检索包含向量嵌入的文档。在 Atlas Vector Search 索引定义中,您可以为包含嵌入的集合字段建立索引,以便针对这些字段进行向量搜索。Atlas Vector Search 支持长度小于或等于 4096 维的嵌入。
您还可以通过索引集合中要运行 Atlas Vector Search 查询的任何布尔型、日期型、数字型、objectId、字符串型和 UUID 字段来预过滤数据。过滤数据可以缩小搜索范围,并确保某些向量嵌入不会参与比较。
要了解如何为 Atlas Vector Search 编制字段索引,请参阅如何为 Vector Search 编制字段索引。
Atlas Vector Search 查询
Atlas Vector Search 支持使用 Hierarchical Navigable Small Worlds 的近似最近邻 (ANN) 搜索和精确最近邻 (ENN) 搜索。
为了找到最相似的向量, Atlas Vector Search 在不扫描每个向量嵌入的情况下执行 ANN 搜索,而 ENN 搜索则对所有索引向量嵌入进行详尽搜索。要了解更多信息,请参阅 vectorSearch 定义。
Atlas Vector Search 查询由聚合管道阶段组成,其中 $vectorSearch
阶段是管道中的第一个阶段。 基本 Atlas Vector Search 查询的过程如下:
您选择 ANN 或 ENN 搜索,并指定查询向量,后者是表示搜索查询的向量嵌入。
Atlas Vector Search 在您的数据中查找最接近查询向量的向量嵌入。
Atlas Vector Search 返回包含最相似向量的文档。
要自定义向量搜索查询,您可以使用 MQL 匹配表达式和受支持的查询或聚合操作符来预先过滤已建立索引的字段数据,也可以添加额外的聚合阶段来进一步处理和组织结果。
要了解如何创建和运行 Atlas Vector Search 查询,请参阅运行向量搜索查询。
后续步骤
如果想亲身体验创建 Atlas Vector Search 索引和针对示例数据运行 Atlas Vector Search 查询,请尝试 MongoDB University 的 Atlas Vector Search 课程和以下页面中的教程:
为了获得最佳性能,我们建议部署单独的搜索节点,以便隔离工作负载。搜索节点支持并发查询执行,以减少单个查询延迟。要了解详情,请参阅查看部署选项。