View a markdown version of this page

向量索引疑難排解 - Amazon DynamoDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

向量索引疑難排解

下表列出使用向量索引時的常見問題,以及如何解決這些問題。

徵狀 原因 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並等到 Backfillingfalse,然後重試搜尋。
使用向量寫入項目時,寫入遭拒 向量的索引維度不正確。 確定向量長度符合索引 Dimensions。請參閱 使用向量資料寫入項目
寫入遭拒,且「參數無效類型」 向量屬性的資料類型錯誤。DynamoDB 預期 32 位元浮點數的清單。常見原因包括傳送字串 (S)、數字純量 (N)、數字集 (NS) 或包含非數字元素的清單。當單一成員的類型錯誤時,錯誤訊息會鎖定違規的元素索引。 將向量屬性作為數字 (L) 的清單 () 傳送N。確認清單中的每個元素都是有效的數字,且清單長度符合索引 Dimensions
移除或省略向量索引分割區索引鍵屬性SearchVectors後, 不再傳回項目 從項目中移除向量索引分割區索引鍵屬性 (透過 REMOVE 中的 UpdateItem) 或在 中省略它PutItem不會產生錯誤。不過,即使基礎資料表項目及其向量內嵌仍然存在,項目仍會無提示地取消索引,且不會再出現在搜尋結果中。 確定您要搜尋的每個項目都會保留向量索引鍵屬性。如果項目意外從搜尋結果中消失,請確認其分割區索引鍵屬性仍存在於基底資料表項目上。
寫入遭拒,其中「不能包含空字串值」或向量索引分割區索引鍵的類型不相符 向量索引分割區索引鍵屬性設定為空字串或寫入錯誤的資料類型。DynamoDB 拒絕這些寫入,因為索引鍵屬性不能為空,且必須符合宣告的類型。 針對向量索引分割區索引鍵屬性,使用具有正確資料類型的有效非空白值。檢查索引定義以確認預期的類型。
搜尋結果中缺少屬性 向量索引不會投影此屬性。 您只能擷取投影到索引中的屬性。若要傳回其他屬性,請使用更廣泛的投影重新建立索引,或將 ProjectionType設定為 ALL

將分割區索引鍵新增至現有的向量索引

向量索引的 SearchSchema會在建立時修正。您無法在建立索引後新增、移除或變更分割區索引鍵 (HASH)。您也無法變更內嵌篩選條件屬性。若要變更結構描述,請建立新的索引並遷移至該索引。

若要新增分割區索引鍵或變更其他SearchSchema屬性,請完成下列步驟。

  1. 使用您需要的分割區索引鍵建立新的向量索引。在 VectorIndexUpdates 參數中使用 UpdateTable API 搭配Create動作。為新索引命名不同的名稱。如需說明,請參閱將向量索引新增至現有資料表

  2. 等待新的索引完成回填。呼叫 DescribeTable並確認 IndexStatusACTIVE,而 Backfillingfalse

  3. 更新您的應用程式,將SearchVectors請求傳送至新索引。在 中包含分割區索引鍵值SearchConditionExpression。如需詳細資訊,請參閱使用 SearchConditionExpression 篩選

  4. 確認正確的結果後,請刪除舊索引以停止支付其儲存體的費用。在 VectorIndexUpdates 參數中使用 UpdateTable API 搭配Delete動作。如需說明,請參閱刪除向量索引

索引操作不會影響基底資料表資料

建立或刪除向量索引不會影響基底資料表或其項目。DynamoDB 會在回填期間從基底資料表項目重新衍生向量資料。