使用向量搜索集合 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用向量搜索集合

OpenSearch Serverless 中的向量搜索集合类型提供了可扩展且性能高的相似度搜索功能。它使您可以轻松构建现代机器学习 (ML) 增强搜索体验和生成式人工智能 (AI) 应用程序,而无需管理底层的向量数据库基础架构。

向量搜索集合的用例包括图像搜索、文档搜索、音乐检索、产品推荐、视频搜索、基于位置的搜索、欺诈检测和异常检测。

由 OpenSearch 于 Serverless 的矢量引擎由中的 k 最近邻 (k-nn) 搜索功能提供支持 OpenSearch,因此您可以通过无服务器环境的简单性获得相同的功能。该引擎支持 k-nn OpenSearch API 操作。通过这些操作,您可以利用全文搜索、高级筛选、聚合、地理空间查询、嵌套查询来更快地检索数据,并增强搜索结果。

向量引擎提供距离指标,例如欧几里得距离、余弦相似度和点积相似度,并且可以容纳 16,000 个维度。您可以存储具有各种元数据数据类型的字段,例如数字、布尔值、日期、关键字和地理点。您还可以存储带有描述性信息的文本字段,以便为存储的向量添加更多上下文。将数据类型放在一起可以降低复杂性、提高可维护性,并避免数据重复、版本兼容性挑战和许可问题。

开始使用向量搜索集合

在本教程中,您将完成以下步骤来实时存储、搜索和检索向量嵌入:

步骤 1:配置权限

要完成本教程(以及一般使用 OpenSearch 无服务器),您必须拥有正确的 Amazon Identity and Access Management (IAM) 权限。在本教程中,您将创建一个集合、上传和搜索数据,然后删除该集合。

您的用户或角色必须已经附加基于身份的策略,并且具有以下最低权限:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "aoss:CreateCollection", "aoss:ListCollections", "aoss:BatchGetCollection", "aoss:DeleteCollection", "aoss:CreateAccessPolicy", "aoss:ListAccessPolicies", "aoss:UpdateAccessPolicy", "aoss:CreateSecurityPolicy", "iam:ListUsers", "iam:ListRoles" ], "Effect": "Allow", "Resource": "*" } ] }

有关 OpenSearch 无服务器 IAM 权限的更多信息,请参阅适用于 Amazon OpenSearch 无服务器的 Identity and Access Management

步骤 2:创建集合

集合是一组 OpenSearch 索引,它们协同工作以支持特定的工作负载或用例。

创建 OpenSearch 无服务器集合
  1. 打开亚马逊 OpenSearch 服务控制台,网址为 https://console.aws.amazon.com/aos/home

  2. 选择左侧导航窗格中的 Collections(集合),然后选择 Create collection(创建集合)。

  3. 命名集合住房

  4. 对于集合类型,选择向量搜索。有关更多信息,请参阅 选择集合类型

  5. 部署类型下,清除启用冗余(活动副本)。这会在开发或测试模式下创建一个集合,并将集合中的 OpenSearch 计算单元 (OCU) 数量减少到两个。如果要在本教程中创建生产环境,则请选中该复选框。

  6. 安全下,选择轻松创建以简化您的安全配置。默认情况下,向量引擎中的所有数据在传输过程中和静止状态下都经过加密。向量引擎支持精细的 IAM 权限,因此您可以定义谁可以创建、更新和删除加密、网络、集合和索引。

  7. 选择 下一步

  8. 查看集合设置并选择 提交。稍等几分钟,等集合状态变为 Active

步骤 3:上传并搜索数据

索引是具有通用数据架构的文档集合,它为您提供了一种存储、搜索和检索向量嵌入和其他字段的方法。您可以使用 OpenSearch 仪表板中的开发工具控制台或 Po stm an 或 awscurl 等 HTTP 工具,创建数据并将其上传到 OpenSearch 无服务器集合中的索引。本教程使用开发工具。

索引和搜索“movies”(电影)集合中的数据
  1. 要为您的新集合创建单一索引,请在开发工具控制台中发送以下请求。默认情况下,这将创建一个带有 nmslib 引擎和欧几里得距离的索引。

    PUT housing-index { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3 }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. 要将单个文档索引到 housing-index 中,请发送以下请求:

    POST housing-index/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. 要搜索与索引中的属性相似的属性,请发送以下查询:

    GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 10, 20, 30 ], "k": 5 } } } }

步骤 4:删除集合

由于住房集合用于测试目的,因此请确保在您完成试验后将其删除。

删除 OpenSearch 无服务器集合
  1. 返回亚马逊 OpenSearch 服务控制台。

  2. 选择左侧导航窗格中的集合,然后选择属性集合。

  3. 选择删除,然后确认删除。

经过筛选的搜索

您可以使用筛选条件来优化语义搜索结果。要创建索引并对文档执行经过筛选的搜索,请使用以下说明替换上一个教程中的上传和搜索数据。其他步骤保持不变。有关筛选条件的更多信息,请参阅使用筛选条件进行 k-NN 搜索

索引和搜索“movies”(电影)集合中的数据
  1. 要为您的集合创建单个索引,请在开发工具控制台中发送以下请求:

    PUT housing-index-filtered { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "method": { "engine": "faiss", "name": "hnsw" } }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. 要将单个文档编入索引 housing-index-filtered,请发送以下请求:

    POST housing-index-filtered/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. 要搜索西雅图给定价格和给定距离范围内的公寓数据,请发送以下请求:

    GET housing-index-filtered/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 0.1, 0.2, 0.3 ], "k": 5, "filter": { "bool": { "must": [ { "query_string": { "query": "Find me 2 bedroom apartment in Seattle under $3000 ", "fields": [ "title" ] } }, { "range": { "price": { "lte": 3000 } } }, { "geo_distance": { "distance": "100miles", "location": { "lat": 48, "lon": 121 } } } ] } } } } } }

十亿级工作负载

向量搜索集合支持包含数十亿个向量的工作负载。您无需出于扩展目的重新编制索引,因为自动扩缩功能会为您执行此操作。如果您有数百万个(或更多)具有大量维度的向量,并且需要超过 200 个 OCU,请联系 Su Amazon pp ort 以提高您的账户的最大 OpenSearch 计算单位 (OCU)。

限制

向量搜索集合具有以下限制:

  • 向量搜索集合不支持 Apache Lucene ANN 引擎。

  • 向量搜索集合仅支持带有 Faiss 的 HNSW 算法,不支持 IVF 和 IVFQ。

  • 向量搜索集合不支持预热、统计数据和模型训练 API 操作。

  • 向量搜索集合不支持内联脚本或存储脚本。

  • 矢量搜索集合中 Amazon Web Services Management Console 没有索引计数信息。

  • 向量搜索集合上索引的刷新间隔为 60 秒。

后续步骤

现在您已知道如何创建向量搜索集合和索引数据,您可能想尝试以下一些练习:

  • 使用 OpenSearch Python 客户端处理矢量搜索集合。请参阅本教程GitHub

  • 使用 OpenSearch Java 客户端处理矢量搜索集合。请参阅本教程GitHub

  • 设置 LangChain 为 OpenSearch 用作矢量存储。 LangChain 是一个开源框架,用于开发由语言模型支持的应用程序。有关更多信息,请参阅LangChain 文档