SearchConditionExpression must be provided when SearchSchema has a HASH key
TL;DR — l'index vectoriel a été créé avec un attribut HASH dans son schéma de recherche, ce qui rend un filtre de partition obligatoire. Chaque appel SearchVectors doit épingler exactement une valeur pour lui avec une condition d'égalité ; il n'existe pas de mode « chercher toutes les partitions ».
Ce que ça signifie
ValidationException: SearchConditionExpression must be provided when SearchSchema has a HASH keyC'est la réponse verbatim du service que nous avons capturée dans us-east-1 en omettant la condition face à un index défini avec un élément HASH. Le choix a été fait à la création de l'index : une clé HASH partitionne l'index, et dès lors chaque recherche est restreinte à exactement une valeur de partition.
Pourquoi ça arrive
- La condition manque complètement — le cas le plus courant quand du code écrit pour un index sans schéma est pointé vers un index avec une clé
HASH. - L'expression n'épingle pas l'attribut
HASH— filtrer uniquement sur un attributINLINE_FILTERne satisfait pas l'exigence. - L'expression utilise autre chose que l'égalité —
SearchConditionExpressionn'accepte que=, donc unbegins_withou unINsur l'attribut de partition échoue aussi.
Comment le corriger
Ajoute la condition et épingle une valeur :
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"}}'Si ton mode d'accès a réellement besoin d'une recherche inter-partitions, l'index doit être créé sans élément HASH — le schéma de recherche est immuable, donc cela veut dire un nouvel index. Et traite la clé comme un choix de routage, pas comme une frontière de sécurité : le contrôle d'accès à granularité fine ne s'applique pas à SearchVectors.
Sur le même sujet
Ce qu'une clé HASH t'apporte (montée en charge du débit, recherches moins chères) et ce qu'elle coûte : le guide de la recherche vectorielle DynamoDB.