SearchConditionExpression must be provided when SearchSchema has a HASH key
TL;DR — このベクトルインデックスは HASH 検索スキーマ属性付きで作成されており、それがパーティションフィルターを必須にします。すべての SearchVectors 呼び出しは、等価条件でそれにちょうど 1 つの値を固定しなければなりません。「全パーティションを検索する」モードはありません。
意味
ValidationException: SearchConditionExpression must be provided when SearchSchema has a HASH keyこれは、HASH 要素付きで定義されたインデックスに対して条件を省略することで、私たちが us-east-1 で捕捉したサービスの逐語的なレスポンスです。選択はインデックスの作成時に行われました。HASH キーはインデックスをパーティション分割し、それ以降、各検索はちょうど 1 つのパーティション値にスコープされます。
発生する理由
- 条件が完全に欠けている — スキーマなしのインデックスに対して書かれたコードを、
HASHキーを持つインデックスに向けたときの最も一般的なケースです。 - 式が
HASH属性を固定していない —INLINE_FILTER属性だけでフィルタリングしても、この要件は満たされません。 - 式が等価以外を使っている —
SearchConditionExpressionは=のみを受け付けるため、パーティション属性へのbegins_withやINも失敗します。
修正方法
条件を追加して、1 つの値を固定します:
aws dynamodb search-vectors \
--table-name SupportTickets \
--index-name TicketEmbeddings \
--search-vector file://query-vector.json \
--top-k 10 \
--search-condition-expression "product = :p" \
--expression-attribute-values '{":p": {"S": "checkout"}}'アクセスパターンが本当にクロスパーティション検索を必要とするなら、インデックスは HASH 要素なしで作成されなければなりません — 検索スキーマはイミュータブルなので、それは新しいインデックスを意味します。そして、このキーはルーティングの選択であって、セキュリティ境界ではないものとして扱ってください。きめ細かなアクセスコントロールは SearchVectors には適用されません。
関連ページ
HASH キーが何をもたらし(スループットのスケーリング、より安価な検索)、何を犠牲にするか: DynamoDB ベクトル検索ガイド。