

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

# 使用 Amazon CloudSearch 搜尋 DynamoDB 資料
<a name="searching-dynamodb-data"></a>

設定索引選項或透過主控台將資料上傳至搜尋網域時，您可以將 DynamoDB 資料表指定為來源。這可讓您快速設定搜尋網域，以實驗搜尋存放在 DynamoDB 資料庫資料表中的資料。

為使您的搜尋網域與資料表的變更保持同步，您可以同時傳送更新至資料表和您的搜尋網域，或者定期將整個資料表載入新的搜尋網域。

**Topics**
+ [設定 Amazon CloudSearch 網域以搜尋 DynamoDB 資料](#searching-dynamodb-data.configuring)
+ [從 DynamoDB 將資料上傳至 Amazon CloudSearch](#searching-dynamodb-data.uploading)
+ [將搜尋網域與 DynamoDB 資料表同步](#searching-dynamodb-data.sync)

## 設定 Amazon CloudSearch 網域以搜尋 DynamoDB 資料
<a name="searching-dynamodb-data.configuring"></a>

設定搜尋網域以搜尋 DynamoDB 資料最簡單的方法是使用 Amazon CloudSearch 主控台。主控台的設定精靈會分析您的資料表資料，並根據資料表中的各項屬性就索引選項提供建議。您可以修改建議的組態，控制要對哪些資料表屬性編製索引。

**注意**  
若要從 DynamoDB 上傳資料，您必須具有存取您要上傳之服務和資源的許可。如需詳細資訊，請參閱[使用 IAM 控制對 DynamoDB 資源的存取](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/UsingIAMWithDDB.html)。

當您從 DynamoDB 資料表自動設定搜尋網域時，最多可將 200 個唯一屬性映射至索引欄位。（您無法為搜尋網域設定超過 200 個欄位，因此您只能從具有 200 個或更少屬性的 DynamoDB 資料表上傳資料。) 當 Amazon CloudSearch 偵測到具有少量不同值的屬性時，該欄位會在建議的組態中啟用面向。

**重要**  
當您使用 DynamoDB 資料表設定網域時，資料不會自動上傳到網域進行索引。您必須在設定網域之後另行上傳資料以編製索引。

### 使用 Amazon CloudSearch 主控台設定網域以搜尋 DynamoDB
<a name="w2aac17c27b9c11"></a>

您可以使用 Amazon CloudSearch 主控台來分析來自 DynamoDB 資料表的資料，以設定搜尋網域。無論資料表大小如何，從資料表讀取的資料最多為 5 MB。根據預設，Amazon CloudSearch 會從資料表開頭讀取 。您可以指定起始索引鍵，從某一特定項目開始讀取。

**使用 DynamoDB 資料表設定搜尋網域**

1. 開啟位於 https：//[https://console.aws.amazon.com/cloudsearch/home](https://console.aws.amazon.com/cloudsearch/home) 的 Amazon CloudSearch 主控台。

1. 從左側導覽窗格中，選擇**網域**。

1. 選擇網域名稱以開啟其詳細資訊面板。

1. 前往**索引選項**索引標籤，然後選擇**組態精靈**。

1. 選取 **Amazon DynamoDB**。

1. 選取您要分析的 DynamoDB 資料表。
   + 若要限制從資料表讀取時可耗用的讀取容量單位，請輸入您要使用的讀取容量單位百分比上限。
   + 若要開始讀取特定項目，請指定**開始雜湊索引鍵**。如果資料表使用雜湊與範圍類型的主索引鍵，則一併指定該項目的雜湊屬性和範圍屬性。

1. 選擇**下一步**。

1. 檢閱建議的組態。您可以編輯各欄位及加入其他欄位。

1. 完成後，請選擇**確認**。

1. 如果您尚未將資料上傳到網域，請清除**立即執行索引**核取方塊以退出而不編製索引。如果您已完成組態變更，並準備好使用新組態為資料編製索引，請確定**現在已選取執行索引**。當您準備好套用變更時，請選擇**完成**。

## 從 DynamoDB 將資料上傳至 Amazon CloudSearch
<a name="searching-dynamodb-data.uploading"></a>

您可以透過 Amazon CloudSearch 主控台或使用 Amazon CloudSearch 命令列工具，將 DynamoDB 資料上傳至搜尋網域。當您從 DynamoDB 資料表上傳資料時，Amazon CloudSearch 會將其轉換為文件批次，以便對其進行索引。您要由網域組態選擇為各項屬性定義索引欄位。如需詳細資訊，請參閱[設定 Amazon CloudSearch 網域以搜尋 DynamoDB 資料](#searching-dynamodb-data.configuring)。

您可以將多個 DynamoDB 資料表的資料上傳至相同的 Amazon CloudSearch 網域。不過請切記，所有資料表最多總共只能上傳 200 項屬性。如果多個上傳的資料表內出現具有相同索引鍵的項目，最後套用的項目將覆寫所有先前的版本。

將資料表資料轉換為文件批次時，Amazon CloudSearch 會針對從資料表讀取的每個項目產生文件，並將每個項目屬性表示為文件欄位。每份文件獨一無二的 ID 是從 `docid` 項目屬性讀取 (若有) 或根據主索引鍵指派英數字元值。

當 Amazon CloudSearch 產生資料表項目的文件時：
+ 各組字串和各組數字以多值欄位表示。如果 DynamoDB 集合包含超過 100 個值，則只會將前 100 個值新增至多值欄位。
+ 系統會忽略 DynamoDB 二進位屬性。
+ 屬性名稱會修改以符合欄位名稱的 Amazon CloudSearch 命名慣例：
  + 所有大寫字母轉換成小寫。
  + 如果 DynamoDB 屬性名稱的開頭不是字母，則欄位名稱的字首為 `f_`。
  + a-z、0-9 和 \$1 (底線) 除外的任何字元皆以底線取代。若如此轉換會造成欄位名稱重複，欄位名稱後面將附加一個數字以示區別。例如，屬性名稱 `håt`、`h-t`、`hát` 將分別對應至 `h_t`、`h_t1` 和 `h_t2`。
  + 如果 DynamoDB 屬性名稱超過 64 個字元，則屬性名稱的前 56 個字元會與完整屬性名稱的 8 個字元 MD5 雜湊串連，以形成欄位名稱。
  + 如果屬性名稱是 `body`，其將對應至欄位名稱 `f_body`。
  + 如果屬性名稱是 ` _score`，其將對應至欄位名稱 ` f_ _score`。
+ 數字屬性會映射至 Amazon CloudSearch int 欄位，並將值轉換為 32 位元的未簽署整數：
  + 如果數字屬性包含小數值，將僅存放其值的整數部分。小數點右邊的部分一概捨棄。
  + 如果值過大而無法存放為不帶正負號的整數，將截斷其值。
  + 負整數將視為不帶正負號的正整數。

### 透過 Amazon CloudSearch 主控台將 DynamoDB 資料上傳至網域
<a name="searching-dynamodb-data-console"></a>

您可以使用 Amazon CloudSearch 主控台，將最多 5 MB 的資料從 DynamoDB 資料表上傳至搜尋網域。

**使用主控台上傳 DynamoDB 資料**

1. 開啟位於 https：//[https://console.aws.amazon.com/cloudsearch/home](https://console.aws.amazon.com/cloudsearch/home) 的 Amazon CloudSearch 主控台。

1. 從左側導覽窗格中，選擇**網域**。

1. 選擇網域名稱以開啟其組態。

1. 選擇**動作**、**上傳文件**。

1. 選取 **Amazon DynamoDB**。

1. 從下拉式清單中選取包含您資料的 DynamoDB 資料表。
   + 若要限制從資料表讀取時可耗用的讀取容量單位，請輸入讀取容量單位百分比上限。
   + 若要開始讀取特定項目，請指定**開始雜湊索引鍵**。如果資料表使用雜湊與範圍類型的主索引鍵，則一併指定該項目的雜湊屬性和範圍屬性。

1. 完成指定資料表選項後，請選擇**下一步**。

1. 檢閱要上傳的項目。您也可以選擇**下載產生的文件批次來儲存產生的文件批次**。然後選擇**上傳文件**。

## 將搜尋網域與 DynamoDB 資料表同步
<a name="searching-dynamodb-data.sync"></a>

若要讓您的搜尋網域與 DynamoDB 資料表的更新保持同步，您可以透過程式設計方式追蹤並套用更新到您的網域，或定期建立新網域並重新上傳整個資料表。如果您有大量資料，最好依照既定計畫追蹤及套用更新。

### 依照既定計畫同步更新
<a name="searching-dynamodb-data.sync.programmatically"></a>

若要同步 DynamoDB 資料表的變更和新增，您可以建立個別的更新資料表來追蹤您正在搜尋的資料表變更，並定期將更新資料表的內容上傳至對應的搜尋網域。

若要從搜尋網域移除文件，您必須產生並上傳含有每一份刪除的文件各項刪除操作的文件批次。其中一個選項是使用單獨的 DynamoDB 資料表來追蹤已刪除的項目、定期處理資料表以產生批次刪除操作，並將批次上傳至您的搜尋網域。

為確保在初次資料上傳過程中不致遺失任何所做的變更，您必須於初次資料上傳之前開始收集各項追蹤變更。雖然您可以使用相同的資料更新一些 Amazon CloudSearch 文件，但您可以確保不會遺失任何變更，而且您的搜尋網域包含每個文件up-to-date。

您應同步更新的頻率取決於變更量的多寡以及您容許更新延遲的程度。其中一種方法是累積一段固定期間的變更，並於該期間結束時上傳各項變更及刪除該期間的追蹤資料表。

例如，若為每天同步一次變更及新增內容，您可以在每天凌晨建立一個名為 updates\$1YYYY\$1MM\$1DD 的資料表來收集當天的更新。於當天結束時，再將 updates\$1YYYY\$1MM\$1DD 資料表上傳至您的搜尋網域。上傳完成之後，您即可刪除此更新資料表並再建立一個新的資料表供隔天使用。

### 切換到新的搜尋網域
<a name="searching-dynamodb-data.sync.newtable"></a>

若您不想要追蹤個別的更新並套用至您的資料表，也可以定期將整個資料表載入新的搜尋網域，然後將您的查詢流量切換到該新網域。

**切換到新的搜尋網域**

1. 建立新的搜尋網域並複製現有網域的組態。

1. 將整個 DynamoDB 資料表上傳至新網域。如需詳細資訊，請參閱[從 DynamoDB 將資料上傳至 Amazon CloudSearch](#searching-dynamodb-data.uploading)。

1. 新網域啟用後，將導向查詢流量至舊有搜尋網域的 DNS 項目更新為指向新網域。例如，如果您使用 [Amazon Route 53](https://aws.amazon.com/route53/)，您可以使用新的搜尋服務端點來更新記錄集。

1. 刪除舊有網域。