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 keyItu 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 atributINLINE_FILTERtidak memenuhi persyaratannya. - Expression-nya memakai apa pun selain equality —
SearchConditionExpressionhanya menerima=, jadibegins_withatauINpada 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.