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这是我们在 us-east-1 捕获的服务端原样响应:把查询向量包在了 DynamoDB 的 L 类型里。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 构造成一个 AttributeValue 数字的列表,而不是一个 L 值。如果你复用了生成存储属性的那个序列化辅助函数,在查询前先解开它的输出。
维度数是单独检查的,所以一个解开了包裹但长度不对的向量会以另一条消息失败:Invalid size for parameter。
相关内容
查询侧端到端如何工作,附带实测的成本模型:见 DynamoDB 向量搜索指南。