SearchConditionExpression must be provided when SearchSchema has a HASH key
TL;DR — vektör index'i bir HASH arama şeması özniteliğiyle oluşturuldu ve bu, partition filtresini zorunlu kılar. Her SearchVectors çağrısı, onun için bir eşitlik koşuluyla tam olarak bir değer sabitlemek zorundadır; "tüm partition'larda ara" diye bir mod yoktur.
Ne anlama gelir
ValidationException: SearchConditionExpression must be provided when SearchSchema has a HASH keyBu, HASH öğesiyle tanımlanmış bir index'e karşı koşulu atlayarak us-east-1'de yakaladığımız birebir servis yanıtıdır. Seçim index oluşturma anında yapıldı: bir HASH anahtarı index'i partition'lara böler ve o andan itibaren her arama tam olarak bir partition değerine kapsamlanır.
Neden olur
- Koşul tamamen eksik — şemasız bir index'e karşı yazılmış kod,
HASHanahtarlı bir index'e yöneltildiğinde en yaygın durum. - İfade
HASHözniteliğini sabitlemiyor — yalnızca birINLINE_FILTERözniteliği üzerinde filtrelemek gereksinimi karşılamaz. - İfade eşitlik dışında bir şey kullanıyor —
SearchConditionExpressionyalnızca=kabul eder, bu yüzden partition özniteliği üzerindeki birbegins_withya daINde başarısız olur.
Nasıl düzeltilir
Koşulu ekleyin ve tek bir değer sabitleyin:
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"}}'Erişim deseniniz gerçekten partition'lar arası arama gerektiriyorsa, index'in HASH öğesi olmadan oluşturulması gerekir — arama şeması değiştirilemezdir, yani bu yeni bir index demektir. Anahtarı da bir güvenlik sınırı olarak değil, bir yönlendirme seçimi olarak ele alın: ince taneli erişim denetimi SearchVectors'a uygulanmaz.
İlgili sayfalar
Bir HASH anahtarının size ne kazandırdığı (throughput ölçeklemesi, daha ucuz aramalar) ve neye mal olduğu: DynamoDB vektör arama rehberi.