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_withIN も失敗します。

修正方法

条件を追加して、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 ベクトル検索ガイド

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。