

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon CloudSearch による DynamoDB データの検索
<a name="searching-dynamodb-data"></a>

インデックスオプションを設定するとき、またはコンソールを介してデータを検索ドメインにアップロードするときに、DynamoDB テーブルをソースとして指定できます。これにより、検索ドメインをすばやくセットアップし、DynamoDB データベーステーブルに保存されているデータの検索を試みることができます。

検索ドメインがテーブルの変更と同期された状態を保つには、テーブルおよび検索ドメインの両方に更新を送信するか、テーブル全体を新しい検索ドメインに定期的に読み込むことができます。

**Topics**
+ [DynamoDB データを検索するための Amazon CloudSearch ドメインの構成](#searching-dynamodb-data.configuring)
+ [DynamoDB から Amazon CloudSearch へのデータのアップロード](#searching-dynamodb-data.uploading)
+ [検索ドメインと DynamoDB テーブルの同期](#searching-dynamodb-data.sync)

## DynamoDB データを検索するための Amazon CloudSearch ドメインの構成
<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>

DynamoDB テーブルのデータを分析して検索ドメインを設定するために、Amazon CloudSearch コンソールを使用できます。テーブルのサイズに関係なく、最大 5 MB が読み取られます。デフォルトでは、Amazon CloudSearch はテーブルの先頭から読み取ります。開始キーを指定して、特定の項目から読み取りを開始できます。

**DynamoDB テーブルを使用して検索ドメインを設定するには**

1. Amazon CloudSearch コンソール ([https://console.aws.amazon.com/cloudsearch/home](https://console.aws.amazon.com/cloudsearch/home)) を開きます。

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 によってドキュメントバッチに変換されます。ドメイン設定で各属性のインデックスフィールドを選択して定義します。詳細については、「[DynamoDB データを検索するための Amazon CloudSearch ドメインの構成](#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 ビットの符号なし整数に変換されます。
  + 数値属性に 10 進値が含まれる場合、値の整数部だけが保存されます。小数点の右側の値はすべて削除されます。
  + 符号なし整数として保存可能な値より値が大きい場合、値は切り捨てられます。
  + 負の整数は、正の符号なし整数として扱われます。

### Amazon CloudSearch コンソールを使用したドメインへの DynamoDB データのアップロード
<a name="searching-dynamodb-data-console"></a>

Amazon CloudSearch コンソールを使用して、5 MB までのデータを DynamoDB テーブルから検索ドメインにアップロードできます。

**コンソールを使用して DynamoDB データをアップロードするには**

1. Amazon CloudSearch コンソール ([https://console.aws.amazon.com/cloudsearch/home](https://console.aws.amazon.com/cloudsearch/home)) を開きます。

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 テーブルへの変更と追加を同期させるには、別個の更新テーブルを作成して検索対象のテーブルの変更を追跡し、更新テーブルの内容を対応する検索ドメインに定期的にアップロードできます。

検索ドメインからドキュメントを削除するには、削除された各ドキュメントの削除オペレーションを含むドキュメントバッチを生成してアップロードする必要があります。1 つの方法として、別個の DynamoDB テーブルを使用して削除された項目を追跡し、テーブルを定期的に処理して削除オペレーションのバッチを生成し、バッチを検索ドメインにアップロードすることができます。

初期データアップロード時に加えた変更が失われないようにするために、追跡の変更の収集は初期データアップロードの前に開始する必要があります。一部の Amazon CloudSearch ドキュメントは同じデータで更新できますが、変更が失われておらず、検索ドメインに各ドキュメントの最新バージョンが含まれていることを確認してください。

更新を同期させる頻度は、変更のボリュームと更新のレーテンシーの許容度によって決まります。1 つの方法として、一定期間の変更を蓄積し、その期間の終わりに変更をアップロードして、その期間の追跡テーブルを削除することができます。

例えば、変更と追加項目を 1 日 1 回同期させるには、1 日の始めに updates\$1YYYY\$1MM\$1DD というテーブルを作成して毎日の更新を収集できます。1 日の終わりに、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. 古いドメインを削除します。