

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

# 向量索引疑難排解
<a name="VectorSearchTroubleshooting"></a>

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


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

## 將分割區索引鍵新增至現有的向量索引
<a name="VectorSearchTroubleshooting.ChangePartitionKey"></a>

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

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

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

1. 等待新的索引完成回填。呼叫 `DescribeTable`並確認 `IndexStatus`是 `ACTIVE`，而 `Backfilling`是 `false`。

1. 更新您的應用程式，將`SearchVectors`請求傳送至新索引。在 中包含分割區索引鍵值`SearchConditionExpression`。如需詳細資訊，請參閱[使用 SearchConditionExpression 篩選](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Search.Filtering)。

1. 確認正確的結果後，請刪除舊索引以停止支付其儲存體的費用。在 `VectorIndexUpdates` 參數中使用 `UpdateTable` API 搭配`Delete`動作。如需說明，請參閱[刪除向量索引](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Delete)。

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