Search vector contains invalid values
TL;DR — ton paramètre SearchVector a la mauvaise forme. Les embeddings stockés vivent à l'intérieur d'un attribut L, mais le paramètre de requête est un simple tableau de valeurs {"N": …}. Déballe le L, et assure-toi que chaque élément est un nombre simple.
Ce que ça signifie
ValidationException: Search vector contains invalid values. All values in the search vector must be a 32-bit floating-point number attributeC'est la réponse verbatim du service que nous avons capturée dans us-east-1 en enveloppant le vecteur de requête dans le type L de DynamoDB. SearchVectors refuse la requête avant même de toucher l'index.
Pourquoi ça arrive
Le format sur le fil est asymétrique, et presque tout le monde tombe dessus une fois. Un embedding stocké sur un item est un attribut List :
{"embedding": {"L": [{"N": "0.0132"}, {"N": "-0.0475"}]}}Le paramètre de requête SearchVector, lui, non. C'est un simple tableau JSON de valeurs numériques :
[{"N": "0.0132"}, {"N": "-0.0475"}]Envoie la forme stockée comme forme de requête et tu obtiens cette erreur. Elle se déclenche aussi quand un élément à l'intérieur du tableau est une chaîne, un booléen ou une structure imbriquée plutôt qu'une valeur N.
Comment le corriger
Passe le tableau directement. Avec la CLI, le payload file://query-vector.json est le tableau nu ; dans les SDK, construis SearchVector comme une liste d'AttributeValue numériques, pas comme une seule valeur L. Si tu réutilises le helper de marshalling qui a produit l'attribut stocké, déballe sa sortie avant d'interroger.
Le nombre de dimensions est vérifié séparément, donc un vecteur déballé de la mauvaise longueur échoue avec un autre message : Invalid size for parameter.
Sur le même sujet
Comment le côté requête fonctionne de bout en bout, avec un modèle de coûts mesuré en conditions réelles : le guide de la recherche vectorielle DynamoDB.