本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
(预览)使用 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 向量:
-
在为您的域名配置的 Amazon KMS 密钥上创建两个新的授权:
-
授予具有解密权限的 S3 Vectors 后台压缩作业
-
授予使用权限创建 S3 向量存储桶的
GenerateDataKey
授权 OpenSearch
-
-
将您的 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
引中使用引擎之前,请考虑以下限制:
功能 | 行为 |
---|---|
Split/Shrink/Clone索引 |
当与 |
快照 |
使用引
注意虽然不支持快照进行 point-in-time恢复,但 |
UltraWarm 等级 |
使用 |
跨集群复制 |
使用 |
意外删除保护 |
由于使用 |
径向搜索 |
使用 |
为文档编制索引
使用 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
。