SearchConditionExpression must be provided when SearchSchema has a HASH key

TL;DR — 這個向量索引建立時帶了一個 HASH search-schema 屬性,這使得分割區過濾成為必填。每一次 SearchVectors 呼叫都必須用一個等值條件為它釘死恰好一個值;沒有「搜尋所有分割區」模式。

這是什麼意思

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

這是我們在 us-east-1 擷取到的服務原文回應:對一個定義了 HASH 元素的索引省略了條件。這個選擇在索引建立時就做定了:HASH 鍵把索引分了區,從那之後每一次搜尋都被限定在恰好一個分割區值內。

為什麼會發生

  • 條件完全缺失——最常見的情況:針對一個沒有 search schema 的索引寫的程式碼,被指向了一個帶 HASH 鍵的索引。
  • 運算式沒有釘死 HASH 屬性——只對一個 INLINE_FILTER 屬性過濾並不能滿足這個要求。
  • 運算式用了等值以外的任何東西——SearchConditionExpression 只接受 =,所以對分割區屬性用 begins_withIN 也會失敗。

如何修正

加上條件並釘死一個值:

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 元素——search schema 是不可變的,所以那意味著一個新索引。另外,把這個鍵當作一個路由選擇,而不是安全邊界:精細的存取控制不適用於 SearchVectors

相關內容

一個 HASH 鍵能為你買到什麼(吞吐量擴展、更便宜的搜尋)、又要付出什麼代價:見 DynamoDB 向量搜尋指南

不必透過主控台就能操作 DynamoDB

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。