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 數字的 list,而不是一個 L 值。如果你重用了產生儲存屬性的那個 marshalling 輔助函式,在查詢前先把它的輸出拆包。
維度數是另外檢查的,所以一個已拆包但長度不對的向量會以另一則訊息失敗:Invalid size for parameter。
相關內容
查詢端從頭到尾如何運作,加上一個實測的成本模型:見 DynamoDB 向量搜尋指南。