メニュー
Amazon CloudSearch
開発者ガイド (API Version 2013-01-01)

Amazon CloudSearch のテキスト分析スキームの設定

Amazon CloudSearch では、text および text-array フィールドに対して言語固有の分析スキームを個別に設定することができます。分析スキームは、インデックス作成中にフィールドのコンテンツを処理する方法を制御します。ほとんどの場合、各言語のデフォルト設定も適切に機能しますが、分析オプションを微調整することで、検索するデータに関する知識に基づいて検索結果を最適化することができます。サポートされている言語のリストについては、「サポートされている言語」を参照してください。

分析スキームは、処理するテキストの言語と次の分析オプションを指定します。

  • アルゴリズムステミング - アルゴリズムステミングの実行レベルを指定します。使用可能なステミングレベルは、言語によって異なります。

  • 日本語トークン分割ディクショナリ — 日本語を処理する場合にアルゴリズムトークン分割のオーバーライドを指定します。ディクショナリは、文字の特定のセットを単語として分類する方法を指定します。

  • ステミングディクショナリ - アルゴリズムステミングの結果にオーバーライドを指定します。ディクショナリは、共通のルート語またはステムに特定の関連する単語をマッピングします。

  • ストップワード - インデックス作成時および検索中に無視する単語を指定します。

  • シノニム - データ内に存在する単語と同じ意味の単語を指定して、同じ検索結果が得られるようにします。

テキストの処理中に、フィールド値と検索用語は小文字に変換 (大文字/小文字変換) されるため、ストップワード、語幹、およびシノニムの大文字と小文字は区別されません。インデックス作成時および検索リクエスト処理中に Amazon CloudSearch がテキストを処理する方法については、「Amazon CloudSearch でのテキスト処理」を参照してください。

分析スキームごとに言語を指定し、text および text-array フィールドごとに分析スキームを設定する必要があります。Amazon CloudSearch コンソールを使用してフィールドを設定する場合、分析スキームは、デフォルトでは _en_default_ 分析スキームになります。分析スキームに分析オプションを指定しない場合、Amazon CloudSearch は指定された言語のデフォルトオプションを使用します。各言語のデフォルト設定については、「言語固有の設定」を参照してください。

分析スキームを最も簡単に定義できるのは、Amazon CloudSearch コンソールの [Analysis Schemes] ページを使用する方法です。フィールドを有効にするには、分析スキームを適用する必要があります。[Indexing Options] ページから、フィールドに分析スキームを適用できます。コマンドラインツールおよび AWS SDK を使用して、分析スキームを定義し、フィールドごとに分析スキームを設定することもできます。

インデックスフィールドに新しい分析スキームを適用するか、使用されている分析スキームを変更したときは、明示的なrebuild the indexにより、検索結果に変更を反映させる必要があります。

Amazon CloudSearch のステミング

ステミングは、関連する単語を共通のステムに対応付けるプロセスです。ステムは、通常バリアントの派生元であるルートまたはベース語です。たとえば、runrunningran のステムです。ステミングは、インデックス作成中だけでなく、クエリ時にも実行されます。ステミングは、インデックスに含まれる用語の数を減らし、検索用語が検索されるコンテンツ内に存在する用語のバリアントの場合、一致を促進します。たとえば、running という用語をステム run にマッピングしてから running を検索した場合、そのリクエストには running だけでなく run を含むドキュメントも一致します。

Amazon CloudSearch は、アルゴリズムステミングと明示的ステミングディクショナリの両方をサポートします。アルゴリズムによる語幹解釈は、使用する語幹解釈のレベルを指定することで設定します。アルゴリズムによる語幹解釈に使用可能なレベルは、言語によって異なります。

  • なし - アルゴリズムによる語幹解釈を無効にします。

  • 最小 - 複数のサフィックスを削除することにより、基本的な語幹解釈を実行します。

  • ライト - 最も一般的な名詞/形容詞屈折と派生したサフィックスが対象になります。

  • フル - 屈折とサフィックスを積極的に語幹解釈します。

実行されるアルゴリズムステミングのレベルを制御するだけでなく、特定の関連する単語を共通ステムにマッピングするステミングディクショナリを指定できます。ディクショナリは、用語をその語幹にマッピングする文字列:値のペアのコレクションを含む JSON オブジェクトとして指定します。たとえば、{"term1": "stem1", "term2": "stem2", "term3": "stem3"} のようになります。アルゴリズム語幹解釈に加えて、語幹解釈ディクショナリが適用されます。これによって、アルゴリズム語幹解釈の結果をオーバーライドし、特定の語幹解釈の過剰または不足のケースを修正できます。語幹解釈ディクショナリの最大サイズは 500 KB です。語幹解釈ディクショナリのエントリは小文字である必要があります。

分析スキームのカスタム語幹解釈ディクショナリを定義するには、StemmingDictionary キーを使用します。ディクショナリは文字列として Amazon CloudSearch に渡されるため、文字列内のすべての二重引用符をエスケープする必要があります。たとえば、次の分析スキームは running および jumping の語幹を定義します。

Copy
{ "AnalysisSchemeName": "myscheme", "AnalysisSchemeLanguage": "en", "AnalysisOptions": { "AlgorithmicStemming": "light", "StemmingDictionary": "{\"running\": \"run\",\"jumping\": \"jump\"}" } }

分析スキームにアルゴリズムステミングのレベルまたはステミングディクショナリを指定しない場合、Amazon CloudSearch は指定された言語のデフォルトのアルゴリズムステミングレベルを使用します。ステミングは、検索結果から除外されていた可能性がある関連ドキュメントを見つけるのに役立ちますが、過剰なステミングにより、関連性に疑問の余地がある一致が大量に結果に含まれる可能性があります。各言語に設定されているデフォルトのアルゴリズムステミングレベルは、ほとんどのユースケースで十分に機能します。通常、デフォルトから始めて、その後検索結果がユースケースにとって最適になるように調整することをお勧めします。各言語のデフォルト設定については、「言語固有の設定」を参照してください。

Amazon CloudSearch のストップワード

ストップワードは、重要でないか、あまりに一般的であるために大量の一致が発生するという理由で、通常インデックス作成時にも検索時にも無視される単語です。

インデックス作成中、Amazon CloudSearch は、text および text-array フィールドを処理するときにストップワードディクショナリを使用します。ほとんどの場合、ストップワードはインデックスに含まれません。ストップワードディクショナリは、検索リクエストをフィルタするためにも使用されます。

ストップワードディクショナリは、用語の JSON 配列です。たとえば、["a", "an", "the", "of"] のようになります。ストップワードディクショナリでは、無視する各単語を明示的にリストする必要があります。ワイルドカードや正規表現はサポートされていません。

分析スキームのカスタムストップワードディクショナリを定義するには、Stopwords キーを使用します。ディクショナリは文字列として Amazon CloudSearch に渡されるため、文字列内のすべての二重引用符をエスケープする必要があります。たとえば、次の分析スキームは aan および the というストップワードを設定します。

Copy
{ "AnalysisSchemeName": "myscheme", "AnalysisSchemeLanguage": "en", "AnalysisOptions": { "Stopwords": "[\"a\",\"an\",\"the\"]" } }

分析スキームにストップワードディクショナリを指定しない場合、Amazon CloudSearch は指定された言語のデフォルトのストップワードディクショナリを使用します。各言語に設定されているデフォルトのストップワードは、ほとんどのユースケースで適切に機能します。通常、デフォルトから始めて、その後検索結果がユースケースにとって最適になるように調整することをお勧めします。各言語のデフォルト設定については、「言語固有の設定」を参照してください。

Amazon CloudSearch のシノニム

検索しているデータ内に存在する用語に対してシノニムを設定できます。そうすることで、インデックス用語ではなくシノニムを検索した場合、結果にはインデックスされた用語が含まれるドキュメントが含まれます。たとえば、カスタムシノニムを定義して次のようなことができます。

  • 一般的な綴りの誤りを正しい綴りにマッピングする

  • filmmovie のような、同等の用語を定義する

  • fishbarracuda のように、一般的な用語をより特殊な用語にマッピングする

  • tool boxtoolbox のように、複数の単語を 1 つの単語に (またはその逆も) マッピングする

シノニムを定義すると、そのシノニムはインデックスのベーストークンが出現するすべての場所に追加されます。たとえば、barracuda のシノニムとして fish を定義した場合、fish という用語が barracuda という用語を含むすべてのドキュメントに追加されます。多数のシノニムを追加すると、インデックスのサイズだけでなく、クエリのレイテンシーも増大します。シノニムを使用すると一致件数が増加し、一致件数が増加すれば、それだけ結果処理にかかる時間も長くなります。

シノニムディクショナリは、インデックス作成時にテキストフィールドに出現する用語にマッピングを設定するために使用されます。検索リクエストでは、シノニム処理は行われません。デフォルトでは、Amazon CloudSearch はシノニムを定義しません。

次の 2 通りの方法でシノニムを指定できます。

  • グループ内の各用語はグループ内の他のすべての用語のシノニムと見なされる合成グループとして。

  • 特定の用語のエイリアスとして。 エイリアスは指定した用語のシノニムと見なされますが、用語はエイリアスのシノニムとは見なされません。

シノニムディクショナリは、シノニムグループとエイリアスを定義する JSON オブジェクトとして指定されます。groups 値は、配列の配列で、各サブ配列は合成グループです。aliases 値は、文字列:値のペアのコレクションを含むオブジェクトです。ここで、文字列は用語を指定し、値の配列はその用語の各シノニムを指定します。次の例には、合成グループとエイリアスの両方が含まれています。

Copy
{ "groups": [["1st", "first", "one"], ["2nd", "second", "two"]], "aliases": { "youth": ["child", "kid", "boy", "girl"], "adult": ["men", "women"] } }

グループ、エイリアスのいずれも、複数の単語からなるシノニムに対応します。次の例では、合成グループとエイリアスの両方で複数の単語からなるシノニムが使用されています。

Copy
{ "groups": [["tool box", "toolbox"], ["band saw", "bandsaw"]], "aliases": { "workbench": ["work bench"]} }

分析スキームのカスタムシノニムディクショナリを定義するには、Synonyms キーを使用します。ディクショナリは文字列として Amazon CloudSearch に渡されるため、文字列内のすべての二重引用符をエスケープする必要があります。たとえば、次の分析スキームは youth という用語のエイリアスを設定します。

Copy
{ "AnalysisSchemeName": "myscheme", "AnalysisSchemeLanguage": "en", "AnalysisOptions": { Synonyms": "{\"aliases\": {\"youth\": [\"child\",\"kid\"]}}" } }

Amazon CloudSearch コンソールを使用した分析スキームの設定

分析スキームは、Amazon CloudSearch コンソールの [Analysis Schemes] ペインから定義することができます。

分析スキームを定義するには

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

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

  3. [Analysis Schemes] ペインで、[Add Analysis Scheme] をクリックします。

  4. 分析スキームの名前を指定し、言語を選択して、スキームのテキストストップワード、ステミング、およびシノニムオプションを設定します。独自のストップワード、ステム、およびシノニムを設定するか、表示されたディクショナリを直接編集することができます。ディクショナリは、JSON の形式です。ストップワードは、文字列の配列として指定されます。ステムは、1 つ以上のキー:値のペアを含むオブジェクトとして指定されます。シノニムエイリアスも、1 つ以上のキー:値ペアを持つ JSON オブジェクトとして指定されます。ここで、エイリアス値は文字列の配列として指定されます。シノニムグループは JSON 配列として指定されます。(シノニムディクショナリは配列の配列です。)

    言語として日本語を選択すると、特定の語句のデフォルトのトークン分割をオーバーライドするカスタムのトークン分割ディクショナリを指定するオプションも使用できます。詳細については、「日本語トークン分割のカスタマイズ」を参照してください。

  5. [Create] をクリックして変更を保存します。

重要

分析スキームを使用するには、1 つ以上の text または text-array フィールドを適用し、インデックスを再構築する必要があります。[Indexing Options] ページから、フィールドの分析スキームを設定できます。インデックスを再構築するには、[Run Indexing] ボタンをクリックします。

AWS CLI を使用した分析スキームの設定

ステミングオプション、ストップワード、シノニムなど、言語固有のテキスト処理オプションを定義するには、aws cloudsearch define-analysis-scheme コマンドを使用します。AWS CLI のインストールおよびセットアップの詳細については、『AWS Command Line Interface ユーザーガイド』を参照してください。

text または text-array フィールドの設定の一部として分析スキームを指定します。詳細については、「configure indexing options」を参照してください。

分析スキームを定義するには

  • aws cloudsearch define-analysis-scheme コマンドを実行し、--analysis-scheme オプションと、分析オプションを含む JSON オブジェクトを指定します。分析スキームは有効な JSON である必要があります。分析オプションキーおよび値ペアは引用符で囲む必要があります。また、オプション値内のすべての引用符は、バックスラッシュでエスケープする必要があります。分析オプションの形式については、『AWS Command Line Interface Reference』の「define-analysis-scheme 」を参照してください。ステミング、ストップワード、およびシノニムオプションの指定方法については、「分析スキームの設定」を参照してください。

    言語として日本語 (ja) を指定すると、特定の語句のデフォルトのトークン分割をオーバーライドするカスタムのトークン分割ディクショナリを指定するオプションも使用できます。詳細については、「日本語トークン分割のカスタマイズ」を参照してください。

    ヒント

    --analysis-scheme で分析スキームを設定するもっとも簡単な方法は、分析スキームをテキストファイルに保存し、そのファイルを AWS CLI 値として指定します。こうすることで、スキームを読みやすくフォーマットできます。たとえば、以下のスキームはライトレベルのアルゴリズムによる語幹解釈を使用し 2 つのストップワードを設定した myscheme という英語の分析スキームを定義しています。

    Copy
    { "AnalysisSchemeName": "myscheme", "AnalysisSchemeLanguage": "en", "AnalysisOptions": { "AlgorithmicStemming": "light", "Stopwords": "[\"a\", \"the\"]" } }

    このスキームを myscheme.txt というテキストファイルに保存すると、そのファイルを --analysis-scheme パラメーターの値として渡すことができます。

    Copy
    aws cloudsearch define-analysis-scheme --region us-east-1 --domain-name movies --analysis-scheme file://myscheme.txt

重要

分析スキームを使用するには、1 つ以上の text または text-array フィールドを適用し、インデックスを再構築する必要があります。フィールドの分析スキームは aws cloudsearch define-index-field コマンドで設定できます。インデックスを再構築するには、aws cloudsearch index-documents を呼び出します。

AWS SDK を使用した分析スキームの設定

AWS SDK では(Android および iOS SDK を除く)、DefineAnalysisScheme も含めて、Amazon CloudSearch 設定 API で定義されたすべての Amazon CloudSearch アクションがサポートされています。AWS SDK のインストールと使用の詳細については、「AWS Software Development Kits」を参照してください。

重要

分析スキームを使用するには、1 つ以上の text または text-array フィールドを適用し、インデックスを再構築する必要があります。フィールドの分析スキームを、インデックスフィールドを定義するメソッドで設定できます。インデックスを再構築するには、インデックスドキュメントのメソッドを使用します。

Amazon CloudSearch での中国語、日本語、韓国語のバイグラムのインデックス作成

中国語、日本語、韓国語には、明確な単語の境界がありません。単純に個々の文字 (ユニグラム) に対してインデックスを作成すると、検索クエリにあまり関係ないものが一致してしまいます。解決方法の 1 つは、バイグラム でインデックスを付けることです。バイグラムは、文字列の中で隣接する 2 つの文字の連なりです。たとえば、次の例は文字列「 我的氣墊船裝滿了鱔魚 :

Copy
我的  的氣  氣墊  墊船  船裝  裝滿  滿了  了鱔  鱔魚

バイグラムにインデックスを作成することで検索結果は向上しますが、インデックスのサイズが大幅に増加することに注意してください。

中国語、日本語、韓国語でバイグラムにインデックスを作成するには

  1. テキスト分析スキームを作成し、言語を複数言語 (mul) に設定します。

  2. 複数言語分析スキームを使用する CJK データを含むインデックスフィールドを設定します。

フィールドの言語を mul に設定した分析スキームを割り当てると、Amazon CloudSearch は自動的にフィールド内の中国語、日本語、韓国語テキストのバイグラムを生成します。

分析スキームの作成と使用の詳細については、「分析スキームの設定」を参照してください。

日本のコンテンツのインデックスを作成する場合、標準的な日本語プロセッサで使用するカスタムトークン分割ディクショナリも気になるかと思われます。詳細については、「日本語トークン分割のカスタマイズ」を参照してください。

Amazon CloudSearch での日本語トークン分割のカスタマイズ

Amazon CloudSearch の日本語トークン分割の制御を強化する必要がある場合は、分析スキームにカスタムの日本語トークン分割ディクショナリを追加できます。カスタムのトークン分割ディクショナリを設定すると、標準的な日本語プロセッサで特定のエントリがトークン分割される方法をオーバーライドできます。これによって、特にドメイン固有のフレーズにインデックスを作成し取得する必要がある場合に、検索結果の精度が向上する場合があります。

トークン分割ディクショナリは、文字セット、その文字がどのようにトークン分割されるか、各トークンの発音 (読み方)、および品詞タグを指定したエントリのコレクションです。ディクショナリは配列として指定されます。ディクショナリの各エントリは文字列の配列です。エントリは以下のような形式です。

Copy
["<text>","<token 1> ... <token n>","<reading 1> ... <reading n>","<part-of-speech tag>"]

各トークンの読み方およびエントリの品詞タグを指定する必要があります。ストップワードに関連した品詞タグについては、「日本語の品詞タグ」を参照してください。

分析スキームのカスタムトークン分割ディクショナリを定義するには、JapaneseTokenizationDictionary キーを使用します。トークン分割ディクショナリは文字列として Amazon CloudSearch に渡されるため、文字列内のすべての二重引用符をエスケープする必要があります。たとえば、以下の分析スキームのディクショナリは、漢字カナ混じりの場合のセグメンテーションのオーバーライド、および固有名詞のカスタムな読みを指定します。

Copy
{ "AnalysisSchemeName": "jascheme", "AnalysisSchemeLanguage": "ja", "AnalysisOptions": { "Stopwords": "[\"a\", \"the\"]", "AlgorithmicStemming": "full", "JapaneseTokenizationDictionary": "[ [\"日本経済新聞\",\"日本 経済 新聞\",\"ニホン ケイザイ シンブン\",\"カスタム名詞\"], [\"トートバッグ\",\"トート バッグ\",\"トート バッグ\",\"かずカナ名詞\"], [\"朝青龍\",\"朝青龍\",\"アサショウリュウ\",\"カスタム人名\"] ]" } }

AWS CLI で分析スキームを設定する場合、分析スキームをテキストファイルに保存し、そのファイルを --analysis-scheme 値として指定できます。こうすることで、スキームを読みやすくフォーマットできます。たとえば、jascheme 分析スキームを jascheme.txt というファイルに保存し、aws cloudsearch define-analysis-scheme 呼び出し時にそのファイルを渡すことができます。

Copy
aws cloudsearch define-analysis-scheme --region us-east-1 --domain-name mydomain --analysis-scheme file://jascheme.txt

分析スキームの作成と使用の詳細については、「分析スキームの設定」を参照してください。

Amazon CloudSearch での日本語の品詞タグ

日本語でカスタムトークン分割ディクショナリを使用する場合は、各エントリに品詞タグを指定します。品詞タグが停止タグとして設定されたタグの 1 つと一致した場合、そのエントリはストップワードとして扱われます。

次の表は、Amazon CloudSearch で停止タグとして設定される品詞タグを示しています。

停止タグ

Tag 品詞 説明
助動詞 助動詞 つけられた語句に機能的または文法的な意味を付加する動詞。
接続詞 接続詞 独立して現れる接続詞。
フィラー フィラー 会話の中に現れる相槌またはフィラーとして挿入される音。
非言語音 非言語音 言語ではない音。
その他-間投 その他の間投詞 名詞接尾辞または文末の助詞としての分類が困難な単語。
助詞-副詞化 助詞-連体化 名詞と副詞の後に続く「に」および「の」。
助詞-連体化 助詞-連体化 名詞に添えて活用しない単語を変化させる「の」。
助詞-副助詞 助詞-副助詞 位置や移動の方向などをしめす副詞。
助詞-副助詞/並立助詞/終助詞 助詞-副助詞/並立助詞/終助詞 副詞的、並列助詞、終助詞であるかどうか不明な場合の「か」。
助詞-格助詞-連語 助詞-格助詞-連語 主に書く助詞として機能する助詞と動詞の複合。
助詞-格助詞-一般 助詞-格助詞-一般 格助詞。
助詞-格助詞-引用 助詞-格助詞-引用 名詞、話し言葉、引用符、会議の結論の表現、理由、判断、推量などの後に現れる「と」。
助詞-格助詞 助詞-格助詞 亜分類が未定義である格助詞。
助詞-接続助詞 助詞-接続助詞 接続助詞。
助詞-並立助詞 助詞-並立助詞 並立助詞。
助詞-係助詞 助詞-係助詞 係助詞。
助詞-終助詞 終助詞 終助詞。
助詞-間投助詞 間投助詞 文法上間投詞の役割をはたす助詞。
助詞-特殊 助詞-特殊 他の分類に当てはまらない助詞。短歌、俳句などの詩歌に使用される助詞を含みます。
助詞 粒子 分類されていない助詞。
記号-括弧閉 記号-括弧閉 括弧閉: ]。
記号-読点 記号-読点 カンマ: ,。
記号-一般 記号-一般 他のカテゴリに含まれない一般的な記号。
記号-括弧開 記号-括弧開 括弧開: [。
記号-句点 記号-句点 ピリオドと句点。
記号-空白 記号-空白 全角の空白。
記号 記号 分類されていない記号。