SearchConditionExpression must be provided when SearchSchema has a HASH key
요약 — 벡터 인덱스가 HASH 검색 스키마 속성과 함께 생성되어 파티션 필터가 필수가 되었습니다. 모든 SearchVectors 호출은 동등 조건으로 그 속성에 정확히 하나의 값을 고정해야 하며, "모든 파티션 검색" 모드는 없습니다.
무엇을 의미하는가
ValidationException: SearchConditionExpression must be provided when SearchSchema has a HASH key저희가 us-east-1에서 HASH 요소로 정의된 인덱스에 조건을 생략하고 호출해서 캡처한, 서비스의 원문 그대로의 응답입니다. 선택은 인덱스 생성 시점에 이루어졌습니다: HASH 키는 인덱스를 파티션으로 나누고, 그 뒤로 모든 검색은 정확히 하나의 파티션 값으로 한정됩니다.
왜 발생하는가
- 조건이 아예 없습니다 — 스키마 없는 인덱스를 상대로 작성된 코드가
HASH키가 있는 인덱스를 가리키게 될 때 가장 흔한 경우입니다. - 표현식이
HASH속성을 고정하지 않습니다 —INLINE_FILTER속성만 필터링하는 것으로는 요건이 충족되지 않습니다. - 표현식이 동등 조건 외의 것을 사용합니다 —
SearchConditionExpression은=만 허용하므로 파티션 속성에 대한begins_with나IN도 실패합니다.
어떻게 해결하는가
조건을 추가하고 값을 하나 고정하세요:
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"}}'액세스 패턴이 정말로 파티션 간(cross-partition) 검색을 필요로 한다면 인덱스를 HASH 요소 없이 만들어야 합니다 — 검색 스키마는 불변이므로 곧 새 인덱스를 의미합니다. 그리고 이 키는 보안 경계가 아니라 라우팅 선택으로 다루세요: 세분화된 액세스 제어는 SearchVectors에 적용되지 않습니다.
관련 문서
HASH 키가 무엇을 주는지(처리량 확장, 더 저렴한 검색)와 무엇을 대가로 요구하는지: DynamoDB 벡터 검색 가이드.