Search vector contains invalid values
TL;DR — SearchVector パラメータの形が間違っています。保存された埋め込みは L 属性の中に住んでいますが、クエリパラメータは {"N": …} 値の裸の配列です。L を外し、すべての要素が普通の数値であることを確認してください。
意味
ValidationException: Search vector contains invalid values. All values in the search vector must be a 32-bit floating-point number attributeこれは、クエリベクトルを DynamoDB の L 型で包むことで、私たちが us-east-1 で捕捉したサービスの逐語的なレスポンスです。SearchVectors は、インデックスに触れる前にリクエストを拒否します。
発生する理由
ワイヤフォーマットは非対称で、ほぼ全員が一度はここでつまずきます。アイテムに保存された埋め込みは List 属性です:
{"embedding": {"L": [{"N": "0.0132"}, {"N": "-0.0475"}]}}SearchVector リクエストパラメータは違います。数値の裸の JSON 配列です:
[{"N": "0.0132"}, {"N": "-0.0475"}]保存された形をそのままクエリの形として送ると、このエラーになります。配列内の要素が N 値ではなく文字列、ブール値、ネストされた構造である場合にも発生します。
修正方法
配列を直接渡してください。CLI では、file://query-vector.json のペイロードが裸の配列そのものです。SDK では、SearchVector を 1 つの L 値としてではなく、AttributeValue の数値のリストとして構築してください。保存された属性を作ったマーシャリングヘルパーを再利用するなら、クエリの前にその出力を外してください。
次元数は別途チェックされるため、外した後の長さが違うベクトルは別のメッセージで失敗します: Invalid size for parameter。
関連ページ
クエリ側がエンドツーエンドでどう動くか、ライブ計測されたコストモデルとともに: DynamoDB ベクトル検索ガイド。