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 attributeDas 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.