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 keyEsa 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 atributoINLINE_FILTERno satisface el requisito. - La expresión usa cualquier cosa que no sea igualdad —
SearchConditionExpressionsolo acepta=, así que unbegins_witho unINsobre 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.