Amazon CloudSearch
開発者ガイド (API バージョン 2013-01-01)

Amazon CloudSearch を使用した DynamoDB データの検索

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

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

DynamoDB データを検索するための Amazon CloudSearch ドメインの設定

DynamoDB データを検索するように検索ドメインを設定するには、Amazon CloudSearch コンソールを使用するのが最も簡単です。コンソールの設定ウィザードは、テーブルデータを分析し、テーブル内の属性に基づいて推奨されるインデックス作成オプションを表示します。推奨される設定を変更して、インデックスを作成するテーブル属性を制御できます。

注記

DynamoDB からデータをアップロードするには、サービスとアップロードするリソースの両方に対するアクセス許可が必要です。詳細については、「IAM を使用して DynamoDB リソースへのアクセスをコントロールする」を参照してください。

DynamoDB テーブルから検索ドメインを自動的に設定すると、最大 200 の一意の属性をインデックスフィールドにマッピングできます(200 を超えるフィールドを検索ドメインに設定することはできないため、属性が 200 未満の DynamoDB テーブルからのみデータをアップロードできます)。 Amazon CloudSearch により、一意の値の数が少ない属性が検出されると、フィールドの推奨される設定でファセットが有効になります。

重要

DynamoDB テーブルを使用してドメインを設定しても、データがインデックス作成のためにドメインに自動的にアップロードされることはありません。ドメインを設定した後、別個のステップとしてインデックス作成のためにデータをアップロードする必要があります。

Amazon CloudSearch コンソールを使用した DynamoDB を検索するためのドメインの設定

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

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

  1. AWS マネジメントコンソールにサインインし、Amazon CloudSearch console at https://console.aws.amazon.com/cloudsearch/home を開きます。

  2. [Navigation] ペインで、ドメインの名前をクリックし、そのドメインの [Indexing Options] リンクをクリックします。

  3. [Indexing Options] ペインの上部で、[configuration wizard] リンクをクリックします。

  4. [Choose Source] ステップで、[Analyze sample item(s) from DynamoDB] を選択します。

  5. [DynamoDB Table] リストから、分析する DynamoDB テーブルを選択します。

    • テーブルからの読み取り時に消費可能な読み取りキャパシティーユニットを制限するには、使用する読み取りキャパシティーユニットの最大パーセンテージを入力します。

    • 特定の項目から読み取りを開始するには、[Start Hash Key] を指定します。テーブルでハッシュおよび範囲タイプのプライマリキーが指定されている場合、項目のハッシュ属性と範囲属性の両方を指定します。

  6. テーブルオプションの指定が完了したら、[Continue] をクリックします。

  7. [Review Configuration] ステップで、推奨される設定を確認します。これらのフィールドを編集して、フィールドを追加できます。

  8. 終了したら、[Apply Configuration] をクリックします。

  9. [Apply Configuration] ステップでは、設定ウィザードの終了時にインデックス作成を実行するように選択できます。まだデータをドメインにアップロードしていない場合は、[Run Indexing Now] チェックボックスをオフにして、インデックスを作成せずに終了します。設定の変更が終了し、新しい設定でデータのインデックスを作成する準備ができたら、[Run Indexing Now] が選択されていることを確認します。変更を適用する準備が完了したら、[Finish] をクリックします。

最初にドメインを作成するときに、DynamoDB テーブルを使用してインデックスオプションを設定することもできます。[Configure Index] ステップで、[Analyze sample item(s) from DynamoDB] を選択し、分析するテーブルを選択します。

DynamoDB から Amazon CloudSearch へのデータのアップロード

Amazon CloudSearch コンソールまたは Amazon CloudSearch コマンドラインツールを使用して、検索ドメインに DynamoDB データをアップロードできます。DynamoDB テーブルからデータをアップロードすると、インデックスを作成できるように Amazon CloudSearch によってドキュメントバッチに変換されます。ドメイン設定で各属性のインデックスフィールドを選択して定義します。詳細については、「DynamoDB データを検索するための Amazon CloudSearch ドメインの設定」を参照してください。

複数の DynamoDB テーブルから同じ Amazon CloudSearch ドメインにデータをアップロードできます。ただし、すべてのテーブルから最大 200 の属性を組み合わせてアップロードできることに注意してください。同じキーを持つ項目が、アップロードされた複数のテーブルに存在する場合、最後に適用された項目により、それより前のすべてのバージョンが上書きされます。

テーブルデータをドキュメントバッチに変換すると、Amazon CloudSearch によりテーブルから読み取られる項目ごとにドキュメントが生成され、各項目の属性がドキュメントフィールドとして表されます。各ドキュメントの一意の ID は、docid 項目属性(存在する場合)から読み取られるか、プライマリキーに基づいて英数字値が割り当てられます。

Amazon CloudSearch により、テーブル項目のドキュメントが生成された場合:

  • 文字列セットと数値セットは、多値フィールドとして表されます。DynamoDB セットに 100 個を超える値が含まれている場合、最初の 100 個の値だけが多値フィールドに追加されます。

  • DynamoDB バイナリ属性は無視されます。

  • 属性名は、フィールド名の Amazon CloudSearch 命名規則に準拠するように変更されます。

    • 大文字はすべて小文字に変換されます。

    • DynamoDB 属性名の先頭が文字でない場合、フィールド名の先頭には f_ が付きます。

    • a ~ z、0 ~ 9、_(下線)以外のすべての文字は、下線で置き換えられます。この変換の結果フィールド名が重複する場合、フィールド名を一意にするために番号が付けられます。たとえば、属性名 håth-thát はそれぞれ h_th_t1h_t2 にマッピングされます。

    • DynamoDB 属性名が 64 文字を超える場合、属性名の最初の 56 文字が属性名全体の 8 文字の MD5 ハッシュで連結され、フィールド名が形成されます。

    • 属性名が body の場合、フィールド名 f_body にマッピングされます。

    • 属性名が _score の場合、フィールド名 f_ _score にマッピングされます。

  • 数値属性は Amazon CloudSearch int フィールドにマッピングされ、値は 32 ビットの符号なし整数に変換されます。

    • 数値属性に 10 進値が含まれる場合、値の整数部だけが保存されます。小数点の右側の値はすべて削除されます。

    • 符号なし整数として保存可能な値より値が大きい場合、値は切り捨てられます。

    • 負の整数は、正の符号なし整数として扱われます。

Amazon CloudSearch コンソールを使用したドメインへの DynamoDB データのアップロード

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

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

  1. AWS マネジメントコンソールにサインインし、Amazon CloudSearch console at https://console.aws.amazon.com/cloudsearch/home を開きます。

  2. [Navigation] ペインで、ドメインの名前をクリックします。

  3. ドメインのダッシュボードの上部で、[Upload Documents] をクリックします。

  4. [Document Source] ステップで、[Item(s) from DynamoDB] を選択します。

  5. [DynamoDB Table] リストで、データが含まれている DynamoDB テーブルを選択します。

    • テーブルからの読み取り時に消費可能な読み取りキャパシティユニットを制限するには、読み取りキャパシティユニットの最大パーセンテージを入力します。

    • 特定の項目から読み取りを開始するには、[Start Hash Key] を指定します。テーブルでハッシュおよび範囲タイプのプライマリキーが指定されている場合、項目のハッシュ属性と範囲属性の両方を指定します。

  6. テーブルオプションの指定が完了したら、[Continue] をクリックします。

  7. [Review Documents] ステップで、アップロードされる項目を確認します([Download the generated document batch] をクリックして、生成されたドキュメントバッチを保存することもできます)。 終了したら、[Upload Documents] をクリックします。

  8. [Document Summary] ステップで、[Finish] をクリックしてドキュメントのアップロードウィザードを終了します。

検索ドメインと DynamoDB テーブルの同期

検索ドメインと DynamoDB テーブルの更新が同期された状態を保つには、更新をプログラムにより追跡してドメインに適用するか、新しいドメインを定期的に作成してテーブル全体を再度アップロードできます。大量のデータがある場合、プログラムにより更新を追跡して適用することをお勧めします。

プログラムによる更新の同期

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

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

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

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

たとえば、変更と追加項目を 1 日 1 回同期させるには、1 日の始めに updates_YYYY_MM_DD というテーブルを作成して毎日の更新を収集できます。1 日の終わりに、updates_YYYY_MM_DD テーブルを検索ドメインにアップロードしますアップロードが完了したら、更新テーブルを削除し、翌日の新しいテーブルを作成できます。

新しい検索ドメインへの切り替え

個々の更新を追跡してテーブルに適用しない場合、テーブル全体を新しい検索ドメインに定期的に読み込み、クエリトラフィックを新しいドメインに切り替えることができます。

新しい検索ドメインに切り替えるには

  1. 新しい検索ドメインを作成し、既存のドメインから設定をコピーします。

  2. DynamoDB テーブル全体を新しいドメインにアップロードします詳細については、「DynamoDB から Amazon CloudSearch へのデータのアップロード」を参照してください。

  3. 新しいドメインがアクティブになったら、新しいドメインをポイントするようクエリトラフィックを古い検索ドメインに転送する DNS エントリを更新します。たとえば、Amazon Route 53 を使用している場合、新しい検索サービスエンドポイントでレコードセットを更新するだけで済みます。

  4. 古いドメインを削除します。