Search vector contains invalid values

TL;DR — dein SearchVector-Parameter hat die falsche Form. Gespeicherte Embeddings leben in einem L-Attribut, aber der Query-Parameter ist ein nacktes Array von {"N": …}-Werten. Wickle das L aus und stelle sicher, dass jedes Element eine reine Zahl ist.

Was es bedeutet

ValidationException: Search vector contains invalid values. All values in the search vector must be a 32-bit floating-point number attribute

Das ist die wörtliche Service-Response, die wir in us-east-1 eingefangen haben, indem wir den Query-Vektor in DynamoDBs L-Typ gewickelt haben. SearchVectors weist den Request zurück, bevor es den Index berührt.

Warum es passiert

Das Wire-Format ist asymmetrisch, und fast jeder trifft das einmal. Ein auf einem Item gespeichertes Embedding ist ein List-Attribut:

{"embedding": {"L": [{"N": "0.0132"}, {"N": "-0.0475"}]}}

Der SearchVector-Request-Parameter ist es nicht. Er ist ein nacktes JSON-Array von Number-Werten:

[{"N": "0.0132"}, {"N": "-0.0475"}]

Sende die gespeicherte Form als Query-Form und du bekommst diesen Fehler. Er feuert auch, wenn ein Element im Array ein String, Boolean oder eine verschachtelte Struktur statt eines N-Werts ist.

So behebst du es

Übergib das Array direkt. In der CLI ist die file://query-vector.json-Payload das nackte Array; in den SDKs baust du SearchVector als Liste von AttributeValue-Zahlen, nicht als ein L-Wert. Wenn du den Marshalling-Helper wiederverwendest, der das gespeicherte Attribut erzeugt hat, wickle seinen Output vor dem Query aus.

Die Dimensionsanzahl wird separat geprüft, ein ausgewickelter Vektor mit falscher Länge failt also mit einer anderen Meldung: Invalid size for parameter.

Verwandte Themen

Wie die Query-Seite Ende-zu-Ende funktioniert, mit einem live gemessenen Kostenmodell: der DynamoDB-Vektorsuche-Guide.

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.