(预览)使用 Amazon S3 矢量引擎实现高级搜索功能 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

(预览)使用 Amazon S3 矢量引擎实现高级搜索功能

重要

Amazon S3 Vectors 与 OpenSearch 服务的集成处于预览版,可能会发生变化。

亚马逊 OpenSearch 服务允许将 Amazon S3 用作向量索引的矢量引擎。此功能允许您将矢量数据卸载到 Amazon S3,同时以低成本保持亚秒级的矢量搜索功能。

借助此功能,可以将矢量嵌入 OpenSearch 存储在 Amazon S3 矢量索引中,同时将其他文档字段保留在 OpenSearch 集群的存储中。这种架构具有以下优点:

  • 耐久性:写入 S3 Vectors 的数据存储在 S3 上,S3 专为 11 9 的数据持久性而设计。

  • 可扩展性:无需占用集群存储空间即可将大型矢量数据集卸载到 S3。

  • 成本效益:优化矢量密集型工作负载的存储成本。

OpenSearch 使用 S3 向量索引有以下要求:

  • OpenSearch 版本 2.19 或更高版本

  • OpenSearch 优化的实例

  • 您 OpenSearch 发布的最新补丁版本

启用 S3 向量

创建新域或更新现有域时,您可以在 “高级功能” 部分中选择 “启用 S3 向量” 作为引擎选项。当您使用 S3 OpenSearch 向量作为引擎时,此设置允许创建 S3 矢量存储桶。启用此选项后, OpenSearch 请通过以下方式为您的域配置 S3 向量:

  1. 在为您的域名配置的 Amazon KMS 密钥上创建两个新的授权:

    • 授予具有解密权限的 S3 Vectors 后台压缩作业

    • 授予使用权限创建 S3 向量存储桶的GenerateDataKey授权 OpenSearch

  2. 将您的 OpenSearch 域使用的 KMS 密钥配置为 CMK,用于加密所有向量索引数据的其余部分。

使用 S3 矢量引擎创建索引

配置域后,可以在索引映射中使用s3vector作为后端向量引擎的字段创建一个或多个 k-nn 索引。您可以根据自己的用例使用不同的引擎类型配置不同的矢量场。

重要

在创建索引期间,您只能使用s3vector引擎来映射字段定义。创建索s3vector引后,您无法使用引擎添加或更新映射。

以下是一些创建 S3 向量引擎索引的示例。

示例:使用 S3 向量引擎创建 k-nn 索引

PUT my-first-s3vector-index { "settings": { "index": { "knn": true } }, "mappings": { "properties": { "my_vector_1": { "type": "knn_vector", "dimension": 2, "space_type": "l2", "method": { "engine": "s3vector" } }, "price": { "type": "float" } } } }

示例:同时使用 S3 向量和 FAISS 引擎创建 k-nn 索引

此示例强调了您可以在同一个索引中使用多个向量引擎这一事实。

PUT my-vector-index { "settings": { "index": { "knn": true } }, "mappings": { "properties": { "my_vector_1": { "type": "knn_vector", "dimension": 2, "space_type": "l2", "method": { "engine": "s3vector" } }, "price": { "type": "float" }, "my_vector_2": { "type": "knn_vector", "dimension": 2, "space_type": "cosine", "method": { "name": "hnsw", "engine": "faiss", "parameters": { "ef_construction": 128, "m": 24 } } } } } }

不支持的示例:创建索引后添加 S3 矢量引擎

不支持以下方法,并且会失败。

PUT my-first-s3vector-index { "settings": { "index": { "knn": true } } } PUT my-first-s3vector-index/_mapping { "properties": { "my_vector_1": { "type": "knn_vector", "dimension": 2, "space_type": "l2", "method": { "engine": "s3vector" } }, "price": { "type": "float" } } }

功能限制

在索s3vector引中使用引擎之前,请考虑以下限制:

s3vector 引擎不支持功能和行为
功能 行为

Split/Shrink/Clone索引

当与knn_vector字段中配置了引s3vector擎的索引一起使用时,它们会 APIs 失败。

快照

使用引s3vector擎的索引不支持快照。对于托管域:

  • 自动快照仅包括未使用s3vector引擎的索引。

  • s3vector索引的手动快照请求失败。

注意

虽然不支持快照进行 point-in-time恢复,但s3vector引擎和 OpenSearch 优化实例可提供 11 个 9 的耐久性。

UltraWarm 等级

使用s3vector引擎配置的索引无法迁移到 UltraWarm 层。

跨集群复制

使用s3vector引擎配置的索引不支持跨集群复制。

意外删除保护

由于使用s3vector引擎的索引不支持快照,因此意外删除保护不可用。您仍然可以恢复域中的其他索引。

径向搜索

使用s3vector引擎的字段不支持使用径向搜索的查询。

为文档编制索引

使用 S3 矢量引擎创建索引后,您可以使用标准 _bulk API 提取文档。 OpenSearch 使用s3vector引擎自动将knn_vector字段的矢量数据实时卸载到 S3 向量索引。属于其他字段或使用不同引擎的knn_vector字段的数据将由 OpenSearch 其自己的存储层保存。

对于所有已确认的批量请求, OpenSearch 保证所有数据(向量和非矢量)都是持久的。如果请求收到否定确认,则无法保证该批量请求中文档的持久性。您应该重试此类请求。

批量索引示例

POST _bulk { "index": { "_index": "my-first-s3vector-index", "_id": "1" } } { "my_vector_1": [1.5, 2.5], "price": 12.2 } { "index": { "_index": "my-first-s3vector-index", "_id": "2" } } { "my_vector_1": [2.5, 3.5], "price": 7.1 } { "index": { "_index": "my-first-s3vector-index", "_id": "3" } } { "my_vector_1": [3.5, 4.5], "price": 12.9 } { "index": { "_index": "my-first-s3vector-index", "_id": "4" } } { "my_vector_1": [5.5, 6.5], "price": 1.2 } { "index": { "_index": "my-first-s3vector-index", "_id": "5" } } { "my_vector_1": [4.5, 5.5], "price": 3.7 }

搜索文档

您可以使用标准 _search API 搜索索引,以执行文本、k-nn 或混合查询。对于配置了s3vector引擎的knn_vector字段的查询, OpenSearch 会自动将查询卸载到相应的 S3 向量索引。

注意

使用s3vector引擎时,刷新语义仅适用于未使用s3vector引擎的字段。但是,在成功编制文档索引后,卸载到的矢量数据s3vector将立即可见。

搜索查询示例

GET my-first-s3vector-index/_search { "size": 2, "query": { "knn": { "my_vector_1": { "vector": [2.5, 3.5], "k": 2 } } } }

支持的映射参数

使用 s3vector engine 时,该knn_vector字段支持映射中的以下参数。

向量场参数
参数 必需 描述 支持的值
type 文档中存在的字段类型。 knn_vector
dimension 要提取到索引中的每个向量的维度。 >0,<=4096
space_type 用于计算向量间距离的向量空间。 l2, cosinesimil
method.engine 用于索引和搜索的近似k-nn引擎。 s3vector
method.name 最近邻法 ""
重要

使用s3vector引擎不支持嵌套knn_vector字段类型

计量和计费

在宣布计量之前,此功能不会计费。

禁用 s3vector 引擎

在禁用s3vector引擎之前,请删除当前正在使用该引擎的所有索引。否则,任何禁用引擎的尝试都会失败。

另请注意,启用或禁用s3vector引擎会在您的域上触发蓝/绿部署

要禁用引s3vector擎,请编辑您的域名配置并进行设置S3VectorsEngine.Enabled: false