SearchConditionExpression must be provided when SearchSchema has a HASH key

TL;DR — el índice vectorial se creó con un atributo HASH en su search schema, lo que hace obligatorio un filtro de partición. Cada llamada a SearchVectors debe fijar exactamente un valor para él con una condición de igualdad; no existe un modo de «buscar en todas las particiones».

Qué significa

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

Esa es la respuesta literal del servicio que capturamos en us-east-1 omitiendo la condición contra un índice definido con un elemento HASH. La elección se tomó al crear el índice: una clave HASH particiona el índice, y desde entonces cada búsqueda queda acotada a exactamente un valor de partición.

Por qué ocurre

  • La condición falta por completo — el caso más común cuando código escrito contra un índice sin schema se apunta a uno con clave HASH.
  • La expresión no fija el atributo HASH — filtrar solo por un atributo INLINE_FILTER no satisface el requisito.
  • La expresión usa cualquier cosa que no sea igualdadSearchConditionExpression solo acepta =, así que un begins_with o un IN sobre el atributo de partición también falla.

Cómo solucionarlo

Añade la condición y fija un 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"}}'

Si tu access pattern realmente necesita búsqueda entre particiones, el índice debe crearse sin un elemento HASH — el search schema es inmutable, así que eso significa un índice nuevo. Y trata la clave como una elección de enrutado, no como una frontera de seguridad: el control de acceso de grano fino no aplica a SearchVectors.

Relacionado

Qué te compra una clave HASH (escalado de throughput, búsquedas más baratas) y qué te cuesta: la guía de búsqueda vectorial en DynamoDB.

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.