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 key

C'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 attribut INLINE_FILTER ne satisfait pas l'exigence.
  • L'expression utilise autre chose que l'égalitéSearchConditionExpression n'accepte que =, donc un begins_with ou un IN sur 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.

Travaille avec DynamoDB sans la Console

Un client de bureau rapide pour DynamoDB qui exécute le vrai SQL que DynamoDB ne peut pas — JOINs, GROUP BY, agrégations — avec édition visuelle et un agent IA sur tes propres clés Bedrock.

Essai gratuit de 30 jours, sans carte bancaire — ensuite la formule Gratuit, sans limite de durée.