SearchConditionExpression must be provided when SearchSchema has a HASH key

TL;DR — vector index dibuat dengan atribut search-schema HASH, yang membuat filter partisi menjadi wajib. Setiap panggilan SearchVectors harus mematok tepat satu nilai untuknya dengan kondisi equality; tidak ada mode "cari semua partisi".

Apa artinya

ValidationException: SearchConditionExpression must be provided when SearchSchema has a HASH key

Itu respons layanan verbatim yang kami tangkap di us-east-1 dengan menghilangkan kondisinya terhadap indeks yang didefinisikan dengan elemen HASH. Pilihannya dibuat saat indeks dibuat: key HASH mempartisi indeks, dan sejak saat itu setiap pencarian dilingkupi ke tepat satu nilai partisi.

Mengapa itu terjadi

  • Kondisinya hilang seluruhnya — kasus paling umum ketika kode yang ditulis untuk indeks tanpa schema diarahkan ke indeks dengan key HASH.
  • Expression-nya tidak mematok atribut HASH — memfilter hanya pada atribut INLINE_FILTER tidak memenuhi persyaratannya.
  • Expression-nya memakai apa pun selain equalitySearchConditionExpression hanya menerima =, jadi begins_with atau IN pada atribut partisi juga gagal.

Bagaimana cara memperbaikinya

Tambahkan kondisinya dan patok satu nilai:

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"}}'

Jika access pattern Anda benar-benar membutuhkan pencarian lintas partisi, indeksnya harus dibuat tanpa elemen HASH — search schema immutable, jadi itu berarti indeks baru. Dan perlakukan key-nya sebagai pilihan routing, bukan batas keamanan: fine-grained access control tidak berlaku untuk SearchVectors.

Terkait

Apa yang key HASH berikan kepada Anda (penskalaan throughput, pencarian lebih murah) dan berapa biayanya: panduan vector search DynamoDB.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.