Amazon CloudSearch での動的フィールドの使用 - Amazon CloudSearch

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

Amazon CloudSearch での動的フィールドの使用

動的フィールドを使用すると、事前にフィールド内容が正確にわかっていなくても、ドキュメントにインデックスを作成できます。例えば、製品のセットを検索する場合を考えます。すべての製品カテゴリでのすべての製品属性の名前がわからなくても、すべてのテキストベースの属性が _t で終わるフィールドに保存され、すべての整数値が _i で終わるフィールドに保存されるようにデータを構築することはできます。動的フィールドを使用すると、あらゆる属性用にフィールドを構築しなくても、属性フィールドを適切なフィールドタイプにマッピングできます。こうすることで、事前に必要な設定のボリュームを削減し、新しい属性がついた製品が追加されるたびにドメイン設定を変更する必要がなくなります。また、動的フィールドを使用して、新しいフィールドを検索不可または戻り値として使用できないフィールドにマッピングすることで、そのフィールドを基本的に無視することもできます。

Amazon CloudSearch での動的フィールドの設定

動的フィールドとして指定するには、ワイルドカード (*) をフィールド名の最初または最後の文字、または唯一の文字として指定します。動的フィールド名はワイルドカード (*) で始まるか終わる必要があります。複数のワイルドカードおよび文字列内に組み込まれたワイルドカードはサポートされていません。

動的フィールドの名前は、パターンを定義します。ワイルドカードは、ゼロまたは任意以上の文字とマッチします。このパターンと一致する認識されないフィールドは、動的フィールドのインデックスオプションで設定されます。通常のインデックスフィールドは動的フィールドより優先されます。ドキュメントのフィールド名が通常のインデックスフィールドと動的フィールドのパターンの両方に一致した場合は、通常のインデックスフィールドにマップされます。

注記

動的フィールドで設定できるオプションは、静的フィールドで設定できるものと同じです。同様に、動的フィールドに一致するドキュメントフィールド名は、静的フィールド名に適用される同じ基準をすべて満たす必要があります。

例えば、新しい _i フィールドの名前には int をつける命名規則を作ると、フィールドタイプを *_i に設定し新しい int フィールドに事前定義済みインデックスオプションのセットを設定するパターン int を使用して、動的フィールドを定義できます。review_rating_i のようなフィールドを追加する場合は、*_i オプションに従って設定され自動的にインデックスが作成されます。

ドキュメントフィールドが複数の動的フィールドパターンと一致する場合は、最も長い一致パターンが使用されます。パターンの長さが同じ場合は、フィールド名をアルファベット順にソートした場合に先に来る動的フィールドが使用されます。

* を動的フィールドと定義して、明示的に定義されたフィールドにマップされていないフィールドまたはより長い動的フィールドのパターンと一致させることができます。これは、認識されないフィールドを単純に無視する場合に便利です。詳細については、「Amazon CloudSearch で動的フィールドを使用した認識されないフィールドの無視」を参照してください。

動的フィールドは、ドメインで定義されるフィールドの総数にカウントされます。ドメインで定義できるフィールドの最大数は、動的フィールドを含め、200 です。ただし、1 つの動的フィールドで定義されたパターンは、通常複数のドキュメントフィールドに一致します。従って、インデックスのフィールド総数が 200 を超えることがあります。詳細については、「Amazon CloudSearch の制限について」を参照してください。動的フィールドを使用する場合は、インデックスのフィールド数が大幅に増加するとクエリのパフォーマンスに影響する可能性があることに注意してください。

ドメインの設定に新しいフィールドを追加すると、インデックス作成中の動的に生成されたフィールドの検証に影響を与える場合があります。検証に失敗すると、インデックス作成は失敗します。例えば、*_new という動的フィールドを定義し、rating_new というフィールドを持つドキュメントをアップロードすると、rating_new フィールドがインデックスに追加されます。その後、明示的に rating_new というフィールドを設定すると、インデックス作成を実行したときに、その新しいフィールドの設定がドキュメントの rating_new フィールドのコンテンツの検証に使用されます。*_newtext フィールドとして設定されている場合に rating_newint フィールドとして設定すると、既存の rating_new フィールドに整数以外のデータが含まれている場合、検証に失敗します。

インデックスフィールドの設定の詳細については、「configure indexing options」を参照してください。

Amazon CloudSearch で動的フィールドを使用した認識されないフィールドの無視

Amazon CloudSearch では、インデックスを作成するドキュメントに存在する各フィールドに対してインデックスフィールドを設定する必要があります。ただし、特定のフィールドのセットに対してインデックスを作成して、そのほかの部分は無視したい場合もあります。動的フィールドを使用して、* というリレラルフィールドを定義し、フィールドに対するすべてのインデックスオプションを無効にすることで、認識されないフィールドをすべて無視できます。認識されないフィールドはこれらのオプションを引き継いでドメインに追加されます。ただし、フィールドのコンテンツは検索不可であり戻り値として使用できません。そのため、インデックスのサイズへの影響は最小限になります。(ただし、ドメインで設定されたフィールドの総数にカウントされます)。同様に、*_n のように特定のパターンに一致するフィールドを選択的に無視することもできます。

認識されないフィールドを無視するには
  1. インデックス作成、検索、結果に戻るフィールドを設定します。

  2. ドキュメント内の他のフィールドに一致する動的フィールドを追加し、それらのフィールドのすべてのインデックスオプションを無効にします。

    • フィールド名として、プレフィックス文字列またはサフィックス文字列なしの * を指定します。(より詳細なパターンを指定して無効にするフィールドを絞り込むこともできます。)

    • フィールドタイプに literal を設定し、searchfacetreturn オプションを無効にします。リテラルフィールドの最大サイズは、4096 の Unicode コードポイントであることに注意してください。

より長い動的フィールド名が優先して一致するため、さらに動的フィールドを使用して、使用するフィールドのオプションを設定できます。通常のインデックスフィールドにマッピングされないフィールドまたはより長い動的フィールドが * パターンに一致します。

注記

* という名前で動的フィールドを作成する場合、インデックスにあらゆる有効なフィールド名が含まれる可能性があります。これは、実際にインデックスに存在するかどうかに関わらず、検索リクエストであらゆる有効なフィールド名が参照可能ということでもあります。

Amazon CloudSearch での動的フィールドの検索

他のフィールドと同様に、検索リクエストや式で名前を使用して動的に生成されたフィールドを参照できます。例えば、動的に生成されたフィールド color_t を色の red で検索する場合、構造化クエリパーサーを使用します。

q=color_t:’red’&q.parser=structured

通常のフィールドやより詳細な動的フィールドパターンには一致しないフィールドをマッピングするために補完的な動的フィールド (*) を定義済みの場合は、検索リクエストで任意の有効なフィールド名を指定できます。フィールドが実際にインデックスに存在するかどうかは問いません。

ワイルドカードはフィールド名内ではサポートされていないため、動的フィールド自体を参照することはできません。例えば、q=*_t:’red’ と指定した場合はエラーが戻ります。

動的に生成されたフィールドが動的フィールドの設定から継承するオプションは、検索リクエストでのそのフィールドの使用方法を制御します。例えば、検索できるか、ファセットまたはハイライトを取得できるか、ソートに使用するか、結果に戻るかなどです。動的生成フィールドは明示的に検索しなければならないことに注意してください。簡易クエリパーサーを使用するときや、構造化クエリパーサーで検索するときにフィールドを指定しなければ、動的フィールドはデフォルトで検索されるフィールドには含まれません。

ターゲットフィールドが配列の場合、動的フィールドを他のフィールドのソースとして指定できます。フィールドのソース属性では、ワイルドカードがサポートされています。これにより動的フィールドのグループに一致するパターンを指定できます。例えば、*_t という動的フィールドから生成されたすべてのフィールドを検索するために、all_t_fields というフィールドを作成してそのソース属性を *_t に設定できます。これは、名前が _t で終了するすべてのフィールド内のコンテンツを all_t_fields にコピーします。ただし、このフィールドを検索すると、動的に生成されたフィールドだけではなく、パターンに一致するすべてのフィールドを検索することに注意してください。

検索リクエストの構築と送信の詳細については、「Amazon でのデータの検索 CloudSearch」を参照してください。