SearchConditionExpression must be provided when SearchSchema has a HASH key
In breve — l'indice vettoriale è stato creato con un attributo HASH nel search schema, il che rende obbligatorio un filtro di partizione. Ogni chiamata SearchVectors deve fissarne esattamente un valore con una condizione di uguaglianza; non esiste una modalità "cerca in tutte le partizioni".
Cosa significa
ValidationException: SearchConditionExpression must be provided when SearchSchema has a HASH keyQuesta è la risposta verbatim del servizio che abbiamo catturato in us-east-1 omettendo la condizione contro un indice definito con un elemento HASH. La scelta è stata fatta alla creazione dell'indice: una chiave HASH partiziona l'indice, e da quel momento ogni ricerca è limitata a esattamente un valore di partizione.
Perché succede
- La condizione manca del tutto — il caso più comune quando codice scritto contro un indice senza schema viene puntato su uno con una chiave
HASH. - L'espressione non fissa l'attributo
HASH— filtrare solo su un attributoINLINE_FILTERnon soddisfa il requisito. - L'espressione usa qualcosa di diverso dall'uguaglianza —
SearchConditionExpressionaccetta solo=, quindi anche unbegins_witho unINsull'attributo di partizione fallisce.
Come risolverlo
Aggiungi la condizione e fissa un valore:
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 il tuo pattern di accesso ha davvero bisogno di una ricerca cross-partizione, l'indice va creato senza un elemento HASH — il search schema è immutabile, quindi significa un nuovo indice. E tratta la chiave come una scelta di instradamento, non come un confine di sicurezza: il controllo degli accessi granulare non si applica a SearchVectors.
Argomenti correlati
Cosa ti compra una chiave HASH (scalabilità del throughput, ricerche più economiche) e cosa ti costa: la guida alla ricerca vettoriale DynamoDB.