Amazon CloudSearch での自動入力候補の取得 - Amazon CloudSearch

Amazon CloudSearch での自動入力候補の取得

このセクションでは、候補を取得できるようにサジェスタを設定する方法について説明します。候補は、不完全な検索クエリと一致する可能性のある要素です。これにより、ユーザーがクエリの入力を終了する前に、可能な候補を表示することができます。Amazon CloudSearch では、候補は特定のテキストフィールドのコンテンツに基づいています。候補をリクエストすると、Amazon CloudSearch はサジェスタフィールドの値が指定されたクエリ文字列で始まるすべてのドキュメントを見つけます。一致と見なされるためには、フィールドの先頭がクエリ文字列と一致している必要があります。返されるデータには、各一致に対するフィールド値とドキュメント ID が含まれます。サジェスタは、クエリ文字列との完全一致を見つけるように設定することも、誤字や脱字を修正できるように文字列との近似一致(あいまい一致)を実行するように設定することもできます。

suggest API の詳細については、「API の検索」の「候補」を参照してください。

Amazon CloudSearch のサジェスタの設定

サジェスタを設定するには、一致候補を検索するテキストフィールドの名前と、サジェスタの一意の名前を指定する必要があります。候補を使用するフィールドは、値を返すように設定されている必要があります。フィールド内のデータの先頭から 512 バイトだけが候補の生成に使用されます。

サジェスタの名前は、3 文字以上、64 文字以内で、先頭は英字にする必要があります。使用できる文字は、a​~​z(小文字)、0~​9、_(下線)です。サジェスタ名は、候補を取得するときにクエリ文字列で指定されるため、短い名前を使用することをお勧めします。score という名前は予約済みのため、サジェスタ名として使用できません。

サジェスタは、次の 2 つのオプションもサポートしています。

  • FuzzyMatching—文字列の一致候補を示すときに使用するあいまいさのレベルを、なし、低、高に設定できます。none の場合、指定された文字列は正確なプレフィックスとして処理されます。low の場合、候補は指定された文字列との異なる箇所が 1 文字以内である必要があります。high の場合、候補は 2 文字まで異なることができます。デフォルトは none です。

  • SortExpression—候補のソート方法を制御するためにそれぞれのスコアを計算する式を設定します。スコアは最も近い整数に丸められ、下限が 0 で上限が 2^31-1 です。ドキュメントの関連性スコアは提案には計算されていないため、ソート式は _score 値を参照することはできません。数値フィールドまたは既存の式を使用して候補をソートするには、フィールドまたは式の名前を指定します。サジェスタ用の式が設定されていない場合、候補はアルファベット順にソートされます。サジェスタ内に定義される式は、検索リクエストやその他の式で参照することはできません。式を他の目的に使用する必要がある場合は、式をドメイン設定に追加し、サジェスタから名前で参照してください。式の詳細については、「式の設定」を参照してください。

複数のテキストフィールドから候補を取得する必要がある場合は、フィールドごとにサジェスタを定義し、それぞれの候補リクエストを送信して、各サジェスタから一致を取得します。最大 10 個のサジェスタを設定できます。サジェスタは、特にテキストが多いソースフィールドを使用しており、あいまい一致を高に設定している場合、大量のメモリとディスク容量を消費する場合があります。

ヒント

すべてのドキュメントからのすべての可能性を使用するようにサジェスタを設定するのではなく、最も一般的な 1,000 件または 10,000 件のサーチクエリのインデックスを作成し、それらを使用するようにサジェスタを設定することを検討してください。クエリは個別の Amazon CloudSearch インデックスに保存することも、サジェスタ専用のフィールドに保存することもできます。

サジェスタを最も簡単に定義できるのは、Amazon CloudSearch コンソールの [Suggesters] ページを使用する方法です。また、AWS SDK か AWS CLI を使用してサジェスタを定義することもできます。

重要

検索ドメインにサジェスタを追加したら、これを使用して候補を取得する前に、インデックス作成を実行する必要があります。ドキュメントは追加や削除されるため、定期的にインデックスを再構築して提案を更新する必要があります。IndexDocuments を呼び出すまでは、追加または削除されたドキュメントは提案に反映されません。

Amazon CloudSearch コンソールからのサジェスタの設定

Amazon CloudSearch コンソールから、簡単にサジェスタの追加、更新、削除を行うことができます。

サジェスタを追加するには

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

  2. ナビゲーションペインで、ドメインの名前をクリックし、そのドメインの [Suggesters] リンクをクリックします。

  3. [Suggesters] ペインで、[Add a New Suggester] ボタンをクリックします。このボタンは、ドメインに対して設定されたサジェスタリストの下にあります。

  4. [Name] フィールドに新しいサジェスタの名前を入力します。

  5. [Source] フィールドに、候補を使用するテキストフィールドを指定します。

  6. マイナーな誤字や脱字を修正するための候補を含める場合は、[Fuzzy Matching] オプションを low または high に設定します。low に設定すると、ユーザーのクエリ文字列と 1 文字だけ異なる用語が候補に含まれます。high に設定すると、最大 2 文字異なる用語が候補に含まれます。

  7. 候補をソートする方法を制御する場合は、[Sort Expression] フィールドに数式を入力します。式には、単純に候補をソートするために使用する数値フィールド、既存の式の名前、または任意の有効な式を使用できます。式の詳細については、「式の設定」を参照してください。

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

  9. 検索ドメインの候補の設定が終了したら、サジェスタを使用する前に、ドメインのインデックスを作り直す必要があります。インデックス作成を実行するには、ドメインのダッシュボードに移動し、ドメインダッシュボードの [Run Indexing] ボタンをクリックします。

サジェスタを更新するには

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

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

  3. [Suggesters] ペインで、サジェスタの設定を変更します。

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

サジェスタを削除するには

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

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

  3. [Suggesters] ペインで、削除するサジェスタに対応する [Delete this Suggester] リンクをクリックします。

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

AWS CLI でのサジェスタの設定

aws cloudsearch define-suggester コマンドを使用して、サジェスタを追加または更新することができます。サジェスタを削除するには、aws cloudsearch delete-suggester を使用します。

サジェスタを追加または更新するには

  • aws cloudsearch define-suggester コマンドを実行します。--suggester オプションを使用して、JSON にサジェスタの設定を指定します。サジェスタの設定は引用符で囲み、設定内のすべての引用符はバックスラッシュでエスケープする必要があります。サジェスタ設定の形式については、AWS CLI Command Referenceの「define-suggester」を参照してください。たとえば、次のコマンドは、mysuggester というサジェスタに title に基づいた候補を返すように設定します。

    aws cloudsearch define-suggester --domain-name movies --suggester "{\"SuggesterName\": \"mysuggester\", \"DocumentSuggesterOptions\": {\"SourceField\":\"title\"}}" { "Suggester": { "Status": { "PendingDeletion": false, "State": "RequiresIndexDocuments", "CreationDate": "2014-06-26T17:26:43Z", "UpdateVersion": 27, "UpdateDate": "2014-06-26T17:26:43Z" }, "Options": { "DocumentSuggesterOptions": { "SourceField": "title" }, "SuggesterName": "mysuggester" } } }

    --fuzzy-matching オプションを使用して、マイナーな誤字や脱字を修正する候補を含めることができます。あいまい一致の有効な値は nonelow、および high です。(デフォルトは none です。) low に設定すると、ユーザーのクエリ文字列と 1 文字だけ異なる用語が候補に含まれます。high に設定すると、最大 2 文字異なる用語が候補に含まれます。たとえば、次のコマンドは、ユーザーのクエリ文字列と 1 文字だけ異なる候補を含めるように mysuggester を設定します。

    aws cloudsearch --name mysuggester --source title --fuzzy-matching low

    --sort-expression オプションを使用すると、返される候補のソート方法を制御することができます。ソートには任意の有効な式を使用できます。(通常、ここには、数値フィールドの名前や定義済みの式を指定します。) たとえば、mysuggester によって返される候補を year フィールドの値でソートするには、次のように指定します。

    aws cloudsearch define-suggester --name mysuggester --source title --fuzzy-matching low --sort-expression year

サジェスタを削除するには

  • aws cloudsearch delete-suggester コマンドを実行し、--name オプションを指定します。たとえば、mysuggester を削除するには、次のように指定します。

    aws cloudsearch delete-suggester --name mysuggester --delete

AWS SDK を使用したサジェスタの設定

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

Amazon CloudSearch での候補の取得

HTTP GET を介してドメインの検索エンドポイントの suggest リソースにリクエストを送信することにより、候補を取得します。(例:

http://search-movies-rr2f34ofg56xneuemujamut52i.us-east-1.cloudsearch. amazonaws.com/2013-01-01/suggest?q=kat&suggester=mysuggester

リクエストには、API バージョンを指定して、クエリ文字列を URL エンコードする必要があります。候補リクエストの最大サイズは、HTTP メソッド、URI、プロトコルのバージョンを含め 8190 バイトです。

suggest リソースは、次の 4 つのパラメータをサポートします。

  • q—候補を取得する文字列。

  • suggester—使用するサジェスタの名前。

  • size—取得する候補の数。デフォルトでは、上位 10 件の候補が返されます。(候補は、サジェスタに定義されたソート式に従ってソートされます。サジェスタにソート式が設定されていない場合、候補はアルファベット順にソートされます。)

  • format—レスポンスのコンテンツタイプで、json または xml。デフォルトでは、候補は JSON 形式で返されます。

q および suggester パラメータは必ず指定しなければなりません。空の文字列に対する候補をリクエストした場合、候補は返されません。size および format パラメータはオプションです。

以下の例では、title フィールドのコンテンツに基づいて、文字列 oce の候補を取得します。

http://search-imdb2-m2brrr7ex7z6sqhgwsjdmcuvd4.us-east-1.cloudsearch.amazonaws.com/2013-01-01/suggest?q=san&suggester=citystate { "status": { "rid": "646f5s0oDAr8pVk=", "time-ms": 2 }, "suggest": { "query": "oce", "found": 3, "suggestions": [{ "suggestion": "Ocean's Eleven", "score": 0, "id": "tt0054135" }, { "suggestion": "Ocean's Thirteen", "score": 0, "id": "tt0496806" }, { "suggestion": "Ocean's Twelve", "score": 0, "id": "tt0349903" } ] } }