

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

# Amazon CloudSearch でのオートコンプリート候補の取得
<a name="getting-suggestions"></a>

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

suggest API の詳細については、「[検索 API リファレンス](search-api.md)」の「[Suggest](search-api.md#suggest)」を参照してください。

**Topics**
+ [Amazon CloudSearch のサジェスタの設定](#configuring-suggesters)
+ [Amazon CloudSearch での候補の取得](#retrieving-suggestions)

## Amazon CloudSearch のサジェスタの設定
<a name="configuring-suggesters"></a>

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

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

サジェスタは、次の 2 つのオプションもサポートしています。
+ `FuzzyMatching` — 文字列の一致候補を示すときに使用するあいまいさのレベルを、なし、低、高に設定できます。none の場合、指定された文字列は正確なプレフィックスとして処理されます。low の場合、候補は指定された文字列との異なる箇所が 1 文字以内である必要があります。high の場合、候補は 2 文字まで異なることができます。デフォルトは none です。
+ `SortExpression` — 候補のソート方法を制御するためにそれぞれのスコアを計算する式を設定します。スコアは最も近い整数に丸められ、下限が 0 で上限が 2^31-1 です。ドキュメントの関連性スコアは提案には計算されていないため、ソート式は `_score` 値を参照することはできません。数値フィールドまたは既存の式を使用して候補をソートするには、フィールドまたは式の名前を指定します。サジェスタ用の式が設定されていない場合、候補はアルファベット順にソートされます。サジェスタ内に定義される式は、検索リクエストやその他の式で参照することはできません。式を他の目的に使用する必要がある場合は、式をドメイン設定に追加し、サジェスタから名前で参照してください。式の詳細については、「[式の設定](configuring-expressions.md)」を参照してください。

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

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

サジェスタを定義する最も簡単な方法は、Amazon CloudSearch コンソールの [**[Suggester]** (サジェスタ) ページ](#configuring-suggesters-console)を使用することです。AWS SDKs または を使用してサジェスタを定義することもできます AWS CLI。

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

### Amazon CloudSearch コンソールからのサジェスタの設定
<a name="configuring-suggesters-console"></a>

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

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

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

1. 左側のナビゲーションペインで **[Domains]** (ドメイン) を選択します。

1. ドメイン名を選択し、設定を開きます。

1. **[高度な検索オプション]** タブに移動します。

1. **[サジェスタ]** ペインで **[サジェスタを追加]** を選択します。

1. 新しいサジェスタの名前を入力します。

1. **[ソースフィールド]** に、候補として使用するテキストフィールドを指定します。

1. マイナーな誤字や脱字を修正するための候補を含める場合は、**[あいまい一致]** を **[低]** または **[高]** に設定します。low に設定すると、ユーザーのクエリ文字列と 1 文字だけ異なる用語が候補に含まれます。high に設定すると、最大 2 文字異なる用語が候補に含まれます。

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

1. [**Save changes (変更の保存)**] をクリックします。

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

### を使用したサジェスタの設定 AWS CLI
<a name="configuring-suggesters-clt"></a>

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

**サジェスタを追加または更新するには**
+ `aws cloudsearch define-suggester` コマンドを実行します。`--suggester` オプションを使用して、JSON にサジェスタの設定を指定します。サジェスタの設定は引用符で囲み、設定内のすべての引用符はバックスラッシュでエスケープする必要があります。サジェスタ設定の形式については、 AWS CLI 「 コマンドリファレンス」の「[define-suggester](https://docs.aws.amazon.com/cli/latest/reference/cloudsearch/define-suggester.html)」を参照してください。例えば、次のコマンドは、`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` オプションを使用して、マイナーな誤字や脱字を修正する候補を含めることができます。あいまい一致の有効な値は `none`、`low`、および `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 を使用したサジェスタの設定
<a name="configuring-suggesters-sdk"></a>

AWS SDK では (Android および iOS SDK を除く)、`DefineSuggester` も含めて、 設定 API で定義されたすべての Amazon CloudSearch アクションがサポートされています。AWS SDK のインストールと使用の詳細については、[「AWS Software Development Kits」](https://aws.amazon.com/code)(AWS ソフトウェアデベロップメントキット) を参照してください。

## Amazon CloudSearch での候補の取得
<a name="retrieving-suggestions"></a>

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

```
http://search-movies-rr2f34ofg56xneuemujamut52i.us-east-1.cloudsearch.
amazonaws.com/2013-01-01/suggest?q=oce&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=oce&suggester=title
{
  "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"
      }
    ]
  }
}
```