メタデータフィルタリング - Amazon Simple Storage Service

メタデータフィルタリング

注記

Amazon S3 Vectors は Amazon Simple Storage Service のプレビューリリースであり、変更される可能性があります。

メタデータフィルタリングを使用すると、ベクトルにアタッチされた特定の属性に基づいてクエリ結果をフィルタリングできます。クエリオペレーションでメタデータフィルターを使用して、類似度基準と特定のメタデータ条件の両方に一致するベクトルを検索できます。

S3 Vectors は、フィルタリング可能なメタデータとフィルタリング不可能なメタデータの 2 種類のメタデータをサポートしています。主な違いは、フィルタリング可能なメタデータはクエリフィルターで使用できますが、サイズ制限はより厳しく、フィルタリング不可能なメタデータはフィルターでは使用できませんが、サイズ制限内に大量のデータを保存できることです。ベクトルあたりのサイズ制限やベクトルあたりの最大メタデータキーなど、メタデータ制限の詳細については、「制限と制約」を参照してください。

フィルタリング可能なメタデータ

フィルタリング可能なメタデータを使用すると、特定のメタデータ値に基づいてクエリ結果をフィルタリングできます。デフォルトでは、ベクトルインデックスの作成中にフィルタリング不可能として明示的に指定されない限り、すべてのメタデータフィールドは類似度クエリでフィルタリング可能です。S3 Vectors は、ベクトルあたりのサイズ制限を持つメタデータの文字列、数値、ブール値、およびリストタイプをサポートしています。メタデータタイプは、カテゴリ、タイムスタンプ、ステータス値など、フィルタリングする属性に最適です。

メタデータサイズがサポートされている制限を超えると、PutVectors API オペレーションは 400 Bad Request エラーを返します。ベクトルあたりのフィルタリング可能なメタデータサイズ制限の詳細については、「制限と制約」を参照してください。

フィルタリング可能なメタデータでは、次のオペレーションを使用できます。

演算子 有効な入力タイプ 説明
$eq 文字列、数値、ブール値

単一値の完全一致比較。

配列メタデータ値と比較する場合、入力値が配列内の任意の要素と一致すると、true を返します。例えば、{"category": {"$eq": "documentary"}} はベクトルをメタデータ "category": ["documentary", "romance"] と一致させます。

$ne 文字列、数値、ブール値 等しくない比較
$gt 数値 より大きい比較
$gte 数値 より大きいまたは同じ比較
$lt 数値 未満の比較
$lte 数値 未満または同じ比較
$in プリミティブの空でない配列 配列内の任意の値に一致
$nin プリミティブの空でない配列 配列内のどの値とも一致しない
$exists ブール値 フィールドが存在するかどうかを確認する
$and フィルターの空でない配列 複数の条件の論理 AND
$or フィルターの空でない配列 複数の条件の論理 OR

有効なフィルタリング可能なメタデータの例

単純な等価
{"genre": "documentary"}

このフィルターは、genre メタデータキーが「documentary」と等しいベクトルに一致します。演算子を指定しない場合、S3 Vectors は自動的に $eq 演算子を使用します。

明示的な等価
// Example: Exact match {"genre": {"$eq": "documentary"}}
// Example: Not equal to {"genre": {"$ne": "drama"}}
数値比較
{"year": {"$gt": 2019}}
{"year": {"$gte": 2020}}
{"year": {"$lt": 2020}}
{"year": {"$lte": 2020}}
配列オペレーション
{"genre": {"$in": ["comedy", "documentary"]}}
{"genre": {"$nin": ["comedy", "documentary"]}}
存在チェック
{"genre": {"$exists": true}}

$exists フィルターは、そのメタデータキーに保存されている値に関係なく、「genre」メタデータキーを持つベクトルに一致します。

論理オペレーション
{"$and": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]}
{"$or": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]}
価格帯 (同じフィールドの複数の条件)
{"price": {"$gte": 10, "$lte": 50}}

メタデータフィルタリングを使用してベクトルをクエリする方法の詳細については、「メタデータフィルタリング」を参照してください。

フィルタリング不可能なメタデータ

フィルタリング不可能なメタデータはクエリフィルターでは使用できませんが、フィルタリング可能なメタデータよりも大量のコンテキストデータを保存できます。検索可能にする必要はありませんが、クエリ結果とともに返すことができる大きなテキストチャンク、詳細な説明、またはその他のコンテキスト情報を保存するのに最適です。例えば、フルドキュメントテキスト、イメージの説明、または詳細な製品仕様をフィルタリング不可能なメタデータとして保存できます。

フィルタリング不可能なメタデータキーは、ベクトルインデックスの作成時に明示的に設定する必要があります。インデックスの作成時にメタデータキーをフィルタリング不可能として指定すると、後でフィルタリング可能に変更することはできません。複数のメタデータキーをベクトルインデックスごとにフィルタリング不可能として設定でき、各メタデータキー名は 63 文字に制限されます。ベクトルインデックスごとに許可されるフィルタリング不可能なメタデータキーの最大数の詳細については、「制限と制約」を参照してください。

フィルタリング不可能なメタデータをフィルタリングすることはできませんが、return-metadata パラメータを使用してクエリ結果と一緒に取得できます。一部のユースケースでは、次のようにフィルタリング不可能なメタデータを使用できます。

  • これを使用して、個別のデータソースを解析することなく、アプリケーションのコンテキストを提供します。

  • フィルタリング可能なメタデータサイズ制限を超える大きなテキストチャンクを保存します。

  • ListVectors API オペレーションを使用して、ベクトルエクスポートに含めます。

フィルタリング不可能なメタデータの設定の詳細については、「ベクトルバケットでのベクトルインデックスの作成」を参照してください。