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 keyEssa é 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 atributoINLINE_FILTERnão satisfaz o requisito. - A expressão usa qualquer coisa que não seja igualdade —
SearchConditionExpressionaceita apenas=, então umbegins_withouINno 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.