SearchConditionExpression must be provided when SearchSchema has a HASH key

TL;DR — o índice vetorial foi criado com um atributo HASH no search schema, o que torna um filtro de partição obrigatório. Toda chamada de SearchVectors deve fixar exatamente um valor para ele com uma condição de igualdade; não existe um modo de "pesquisar todas as partições".

O que significa

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

Essa é a resposta literal do serviço que capturamos em us-east-1 ao omitir a condição contra um índice definido com um elemento HASH. A escolha foi feita na criação do índice: uma chave HASH particiona o índice, e a partir daí cada pesquisa fica limitada a exatamente um valor de partição.

Por que isso acontece

  • A condição está faltando por completo — o caso mais comum quando código escrito contra um índice sem schema é apontado para um com uma chave HASH.
  • A expressão não fixa o atributo HASH — filtrar apenas por um atributo INLINE_FILTER não satisfaz o requisito.
  • A expressão usa qualquer coisa que não seja igualdadeSearchConditionExpression aceita apenas =, então um begins_with ou IN no atributo de partição também falha.

Como corrigir

Adicione a condição e fixe um valor:

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"}}'

Se o seu padrão de acesso realmente precisa de pesquisa entre partições, o índice precisa ser criado sem um elemento HASH — o search schema é imutável, então isso significa um novo índice. E trate a chave como uma escolha de roteamento, não como uma fronteira de segurança: o controle de acesso refinado não se aplica a SearchVectors.

Relacionados

O que uma chave HASH compra para você (escalonamento de throughput, pesquisas mais baratas) e o que ela custa: o guia de pesquisa vetorial do DynamoDB.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.