本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
向量索引疑難排解
下表列出使用向量索引時的常見問題,以及如何解決這些問題。
| 徵狀 | 原因 | Resolution |
|---|---|---|
ValidationException: SearchConditionExpression must be
provided when SearchSchema has a HASH key |
索引會在其 SearchSchema 中定義向量索引分割區索引鍵 (HASH),但搜尋並未提供其值。 |
將向量索引分割區索引鍵相等性新增至 SearchConditionExpression,例如 Category = :cat,並具有相符ExpressionAttributeValues的項目。 |
ValidationException: One element in SearchSchema is not
defined in attribute definitions |
SearchSchema 屬性 (向量索引分割區索引鍵或內嵌篩選條件) 不會在資料表的 中宣告AttributeDefinitions。 |
AttributeDefinitions 使用其類型將每個 SearchSchema 屬性新增至 ,與全域次要索引宣告金鑰屬性的方式相同。 |
ValidationException: Invalid comparator used in
SearchConditionExpression |
= 已使用 以外的運算子。向量索引分割區索引鍵和內嵌篩選條件屬性目前僅支援等式運算子。 |
重寫條件以=僅使用。尚未提供比較、範圍和設定成員身分運算子。 |
ValidationException: Provided TopK value is out of valid
range |
TopK 在 1 到 100 之外。 |
TopK 設定為 1 到 100 之間的值。 |
SearchVectors 當索引回填時傳回錯誤 |
向量索引尚未準備好進行搜尋。IndexStatus 可能是 CREATING,或 IndexStatus ACTIVEBackfilling設定為 true。在回填完成之前,您無法搜尋向量索引。 |
使用 DescribeTable並等到 Backfilling為 false,然後重試搜尋。 |
| 使用向量寫入項目時,寫入遭拒 | 向量的索引維度不正確。 | 確定向量長度符合索引 Dimensions。請參閱 使用向量資料寫入項目。 |
| 寫入遭拒,且「參數無效類型」 | 向量屬性的資料類型錯誤。DynamoDB 預期 32 位元浮點數的清單。常見原因包括傳送字串 (S)、數字純量 (N)、數字集 (NS) 或包含非數字元素的清單。當單一成員的類型錯誤時,錯誤訊息會鎖定違規的元素索引。 |
將向量屬性作為數字 (L) 的清單 () 傳送N。確認清單中的每個元素都是有效的數字,且清單長度符合索引 Dimensions。 |
移除或省略向量索引分割區索引鍵屬性SearchVectors後, 不再傳回項目 |
從項目中移除向量索引分割區索引鍵屬性 (透過 REMOVE 中的 UpdateItem) 或在 中省略它PutItem不會產生錯誤。不過,即使基礎資料表項目及其向量內嵌仍然存在,項目仍會無提示地取消索引,且不會再出現在搜尋結果中。 |
確定您要搜尋的每個項目都會保留向量索引鍵屬性。如果項目意外從搜尋結果中消失,請確認其分割區索引鍵屬性仍存在於基底資料表項目上。 |
| 寫入遭拒,其中「不能包含空字串值」或向量索引分割區索引鍵的類型不相符 | 向量索引分割區索引鍵屬性設定為空字串或寫入錯誤的資料類型。DynamoDB 拒絕這些寫入,因為索引鍵屬性不能為空,且必須符合宣告的類型。 | 針對向量索引分割區索引鍵屬性,使用具有正確資料類型的有效非空白值。檢查索引定義以確認預期的類型。 |
| 搜尋結果中缺少屬性 | 向量索引不會投影此屬性。 | 您只能擷取投影到索引中的屬性。若要傳回其他屬性,請使用更廣泛的投影重新建立索引,或將 ProjectionType設定為 ALL。 |
將分割區索引鍵新增至現有的向量索引
向量索引的 SearchSchema會在建立時修正。您無法在建立索引後新增、移除或變更分割區索引鍵 (HASH)。您也無法變更內嵌篩選條件屬性。若要變更結構描述,請建立新的索引並遷移至該索引。
若要新增分割區索引鍵或變更其他SearchSchema屬性,請完成下列步驟。
-
使用您需要的分割區索引鍵建立新的向量索引。在
VectorIndexUpdates參數中使用UpdateTableAPI 搭配Create動作。為新索引命名不同的名稱。如需說明,請參閱將向量索引新增至現有資料表。 -
等待新的索引完成回填。呼叫
DescribeTable並確認IndexStatus是ACTIVE,而Backfilling是false。 -
更新您的應用程式,將
SearchVectors請求傳送至新索引。在 中包含分割區索引鍵值SearchConditionExpression。如需詳細資訊,請參閱使用 SearchConditionExpression 篩選。 -
確認正確的結果後,請刪除舊索引以停止支付其儲存體的費用。在
VectorIndexUpdates參數中使用UpdateTableAPI 搭配Delete動作。如需說明,請參閱刪除向量索引。
索引操作不會影響基底資料表資料
建立或刪除向量索引不會影響基底資料表或其項目。DynamoDB 會在回填期間從基底資料表項目重新衍生向量資料。