翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon S3 ベクトルエンジンを使用した高度な検索機能
Amazon OpenSearch Service では、ベクトルインデックスのベクトルエンジンとして Amazon S3 を使用できるようになりました。この機能を使用すると、ベクトルデータを Amazon S3 にオフロードしつつ、1 秒未満のベクトル検索性能を低コストで維持できます。
この機能を使用すると、OpenSearch は、OpenSearch クラスターのストレージに他のドキュメントフィールドを保持しながら、Amazon S3 OpenSearch ベクトルインデックスにベクトル埋め込みを保存します。このアーキテクチャには次の利点があります:
-
耐久性: S3 Vectors に書き込まれたデータは Amazon S3 に保存され、S3 はイレブンナインのデータ耐久性を実現するよう設計されています。
-
スケーラビリティ: クラスターストレージを消費することなく、大きなベクトルデータセットを S3 にオフロードします。
-
コスト効率: ベクトルが多いワークロードのストレージコストを最適化します。
OpenSearch には、S3 ベクトルインデックスを使用するための以下の要件があります:
-
OpenSearch バージョン 2.19 以降
-
OpenSearch Optimized インスタンス
-
OpenSearch リリースの最新のパッチバージョン
S3 ベクトルの有効化
新しいドメインを作成するとき、または既存のドメインを更新するときは、[詳細設定] セクションで [エンジンオプションとして S3 ベクトルを有効にする] を選択できます。この設定により、エンジンとして S3 Vectors を利用するときに、OpenSearch が S3 ベクトルバケットを作成できるようになります。このオプションを有効にすると、OpenSearch はドメインの S3 ベクトルを次のように設定します。
-
ドメインで設定されたAWS KMSキーに 2 つの新しい許可を作成します。
-
S3 Vectors のバックグラウンドインデックス作成ジョブに対する復号権限付きのグラント
-
OpenSearch が
GenerateDataKeyアクセス許可を持つ S3 ベクトルバケットを作成するためのグラント
-
-
OpenSearch ドメインで使用される KMS キーを、すべてのベクトルインデックスデータの保管時の暗号化用の CMK として設定します。
S3 ベクトルエンジンを使用したインデックスの作成
ドメインを設定したら、s3vector をインデックスマッピングのバックエンドベクトルエンジンとして使用するフィールドを使用して、1 つ以上の 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 インデックス |
これらの API は、 |
スナップショット |
注記スナップショットは point-in-time リカバリではサポートされていませんが、 |
UltraWarm 階層 |
|
クラスター間レプリケーション |
|
誤削除防止 |
|
放射状検索 |
|
ドキュメントのインデックス作成
S3 ベクトルエンジンでインデックスを作成したら、標準 _bulk API を使用してドキュメントを取り込むことができます。OpenSearch は、s3vector エンジンを使用して knn_vector フィールドのベクトルデータをリアルタイムで S3 ベクトルインデックスに自動的にオフロードします。他のフィールドに属するデータ、または異なるエンジンを使用する knn_vector フィールドのデータは、OpenSearch によって独自のストレージ層に保持されます。
確認済みのすべての一括リクエストについて、OpenSearch はすべてのデータ (ベクトルと非ベクトル) の耐久性を保証します。リクエストが否定的な確認を受け取った場合、その一括リクエストのドキュメントの耐久性は保証されません。このようなリクエストは、まれに重複するドキュメントを避けるため、ドキュメント ID を使用して以前に失敗したリクエストを削除した後に再試行することをお勧めします。
一括インデックス作成の例
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 エンジンでは、k-NN 検索クエリは最大値kの 100 をサポートします。つまり、100 個の最も近い近傍の最大値を検索結果に返すことができます。
検索クエリの例
GET my-first-s3vector-index/_search { "size": 2, "query": { "knn": { "my_vector_1": { "vector": [2.5, 3.5], "k": 2 } } } }
s3vector エンジンを使用して、OpenSearch kNN インデックスでフィルタリングされたベクトル検索を実行できます。OpenSearch はフィルターをポストフィルターとして適用し、特定のヒューリスティックに基づいてオーバーサンプリングメカニズムを使用してリコールとレイテンシーのバランスを取ります。
フィルターを使用した検索クエリの例:
GET my-index/_search { "size": 10, "query": { "knn": { "my_vector_field": { "vector": [2.5, 3.5, 1.2, 4.8], "k": 10, "filter": { "range": { "price": { "gte": 10, "lte": 100 } } } } } } }
サポートされているマッピングパラメータ
s3vector エンジンでは、knn_vector フィールドはマッピングで次のパラメータをサポートします。
| [Parameter] (パラメータ) | [Required] (必須) | 説明 | サポートされる値 |
|---|---|---|---|
type |
はい | ドキュメント内に存在するフィールドのタイプ。 | knn_vector |
dimension |
はい | インデックスに取り込まれる各ベクトルのディメンション。 | >0, <=4096 |
space_type |
不可 | ベクトル間の距離を計算するために使用されるベクトル空間。 | l2, cosinesimil |
method.engine |
はい | インデックス作成と検索に使用する近似 k-NN エンジン。 | s3vector |
method.name |
不可 | 最近傍法 | "" |
store |
該当なし | このマッピングパラメータの有効化または無効化は、knn_vector データが OpenSearch に保存されないため、no-op です。 | サポート外 |
doc_values |
該当なし | このマッピングパラメータの有効化または無効化は、knn_vector データが OpenSearch に保存されないため、no-op です。 | サポート外 |
重要
ネスト化された knn_vector フィールドタイプは s3vector エンジンを使用してサポートされていません
使用量測定と請求
この機能の計測と請求については、「Amazon OpenSearch Service の料金
s3vector エンジンの無効化
s3vector エンジンを無効にする前に、現在使用しているすべてのインデックスを削除します。そうしないと、エンジンを無効にする試みは失敗します。
また、s3vector エンジンを有効または無効にすると、ドメインでブルー/グリーンデプロイがトリガーされることに注意してください。
s3vector エンジンを無効にするには、ドメイン設定を編集し、S3VectorsEngine.Enabled:
false を設定します。