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 key

Bu, 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, HASH anahtarlı bir index'e yöneltildiğinde en yaygın durum.
  • İfade HASH özniteliğini sabitlemiyor — yalnızca bir INLINE_FILTER özniteliği üzerinde filtrelemek gereksinimi karşılamaz.
  • İfade eşitlik dışında bir şey kullanıyorSearchConditionExpression yalnızca = kabul eder, bu yüzden partition özniteliği üzerindeki bir begins_with ya da IN de 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.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.