

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

# Amazon CloudSearch でのテキストの検索
<a name="searching-text"></a>

テキストとリテラルの両方のフィールドで、テキスト文字列を検索できます。
+ `Text` および `text-array` フィールドは、常に検索可能です。個々の用語だけでなくフレーズも検索できます。`text` および `text-array` フィールド内の検索では、大文字と小文字は区別されません。
+ `Literal` および `literal-array` フィールドは、ドメインのインデックスオプションで検索を有効にしている場合のみ検索できます。検索文字列の完全一致を検索することができます。リテラルフィールドの検索では、大文字/小文字が区別されます。

簡単なクエリパーサーを使用する場合、または構造化クエリパーサーで検索時にフィールドを指定しない場合、デフォルトではすべての `text` および `text-array` フィールドが検索されます。リテラルフィールドはデフォルトでは検索*されません*。`q.options` パラメータを使用して、検索するフィールドを指定できます。

ユニークなドキュメント ID フィールドを、他のテキストフィールドと同様に検索できます。検索リクエストでドキュメント ID フィールドを参照するには、フィールド名 `_id` を使用します。ドキュメント ID は、必ず検索結果で返されます。

**Topics**
+ [Amazon CloudSearch での個々の用語の検索](#searching-text-terms)
+ [Amazon CloudSearch でのフレーズの検索](#searching-text-phrases)
+ [Amazon CloudSearch でのリテラル文字列の検索](#searching-text-literals)
+ [Amazon CloudSearch でのプレフィックスの検索](#searching-text-prefixes)

## Amazon CloudSearch での個々の用語の検索
<a name="searching-text-terms"></a>

`text` および `text-array` フィールドで個々の用語を検索すると、Amazon CloudSearch は指定されたフィールド内のどこかに検索する用語が含まれているすべてのドキュメントを任意の順序で見つけます。例えば、サンプルの映画データで、`title` フィールドは `text` フィールドとして設定されています。`title` フィールドで *star* を検索すると、*star*、*star wars*、*a star is born* など、`title` フィールドで *star* が含まれているすべての映画が見つかります。これは、一致と見なされるにはフィールド値が検索文字列と完全に一致している必要がある `literal` フィールドの検索とは異なります。

`simple` クエリパーサーでは、`text` および `text-array` フィールドで 1 つ以上の用語を簡単に検索できます。`q.parser` パラメータを使用して他のクエリパーサーを指定しなければ、デフォルトで `simple` クエリパーサーが使用されます。

例えば、*katniss* を検索するには、クエリ文字列に `katniss` と指定します。デフォルトでは、Amazon CloudSearch は検索結果に値を返すことが可能なすべてのフィールドを含めます。`return` パラメータを設定して、返す必要のあるフィールドを指定できます。

```
https://search-domainname-domainid.us-east-1.cloudsearch.amazonaws.com/
2013-01-01/search?q=katniss&return=title
```

デフォルトでは、レスポンスは JSON で返されます。

```
{
    "status": {
        "rid": "rd+5+r0oMAo6swY=",
        "time-ms": 9
    },
    "hits": {
        "found": 3,
        "start": 0,
        "hit": [
            {
                "id": "tt1951265",
                "fields": {
                    "title": "The Hunger Games: Mockingjay - Part 1"
                }
            },
            {
                "id": "tt1951264",
                "fields": {
                    "title": "The Hunger Games: Catching Fire"
                }
            },
            {
                "id": "tt1392170",
                "fields": {
                    "title": "The Hunger Games"
                }
            }
        ]
    }
}
```

複数の用語を指定するには、用語をスペースで区切ります。例: `star wars`。複数の検索用語を指定するときは、デフォルトで、一致と見なされるすべての用語がドキュメントに含まれている必要があります。用語は、テキストフィールド内の任意の場所で、任意の順序で出現する可能性があります。

デフォルトでは、簡易クエリパーサーを使用すると、すべての `text` および `text-array` フィールドが検索されます。`q.options` パラメータを指定することで、検索するフィールドを指定できます。例えば、このクエリでは、`title` および `description` フィールドに検索を制限し、`title` フィールドでの一致の重要度を `description` フィールドでの一致より高く設定します。

```
q=star wars&q.options={fields: ['title^5','description']}
```

簡易クエリパーサーを使用する場合は、次のプレフィックスを使用して、個々の用語を必須またはオプションとして指定したり、検索結果から除外するように指定できます。
+ **`+`** — 一致するドキュメントは用語を含んでいる必要があります。これがデフォルトです。用語をスペースで区切ることは、`+` プレフィックスをその前に付けるのと同じです。
+ **`-`** — 用語を含むドキュメントを検索結果から除外します。`-` 演算子は、個々の用語にのみ適用されます。例えば、デフォルトの検索フィールドに *star* という用語を含むドキュメントを除外するには、`-star` を指定します。`search?q=-star wars` の検索では、*star* という用語は含まれず、*wars* という用語が含まれるすべてのドキュメントが取得されます。
+ **`|`** — 他の用語が含まれていない場合でも、その用語を含むドキュメントが検索結果に含められます。`|` 演算子は、個々の用語にのみ適用されます。例えば、2 つの用語のいずれかが存在するドキュメントを含めるには、`term1 |term2` と指定します。`search?q=star wars |trek` で検索すると、*star* と *wars* の両方、または *trek* という用語を含むドキュメントが取得されます。

これらのプレフィックスは、シンプルなクエリの個々の用語にのみ適用できます。複合クエリを作成するには、簡易クエリパーサーではなく、構造化クエリパーサーを使用する必要があります。例えば、構造化クエリパーサーを使用して *star* および *wars* という用語を検索するには、次のように指定します。

```
(and 'star' 'wars')
```

このクエリでは、検索対象のいずれかのフィールドにそれぞれの用語を含むドキュメントが一致することに注意してください。一致とみなされるには、用語が同じフィールドにある必要はありません。ただし、`(and 'star wars' 'luke')` と指定した場合は、*star* および *wars* は同じフィールド内にある必要があります。*luke* はどのフィールドでもかまいません。

`structured` クエリパーサーを使用するときにフィールドを指定しない場合は、`simple` パーサーの場合と同様に、デフォルトですべての `text` および `text-array` フィールドが検索されます。同様に、`q.options` パラメータを使用して、検索されるフィールドを制御したり、選択したフィールドの重要度を高くすることができます。詳細については、「[複合クエリの作成](searching-compound-queries.md)」を参照してください。

簡易クエリパーサーを使用して、*あいまい*検索を実行することもできます。あいまい検索を実行するには、`~` 演算子と、ユーザーのクエリ文字列と用語が異なっていても一致と見なされる文字数を示す値を追加します。例えば、`planit~1` と指定すると、用語 *planit* を検索しますが、1 文字だけ異なる場合は一致と見なします。つまり、*planet* は結果に含まれます。

## Amazon CloudSearch でのフレーズの検索
<a name="searching-text-phrases"></a>

フレーズを検索すると、Amazon CloudSearch は、指定された順序で完全なフレーズを含むすべてのドキュメントを見つけます。また、*あいまい*フレーズ検索を実行して、相互に指定された距離の範囲内に存在する用語を見つけることもできます。

簡易クエリパーサーを使用した検索で、フレーズ内の個々の用語ではなく、フレーズ全体で一致させるには、フレーズを二重引用符でフレーズを囲みます。例えば、次のクエリでは、*with love* というフレーズを検索します。

```
q="with love"
```

簡易クエリパーサーであいまいフレーズ検索を行うには、`~` 演算子と距離の値を追加します。distance 値には、フレーズ内の単語を分割できる単語の最大数を指定します。例えば、次のクエリは、相互に 3 単語以内で *with love* という用語を検索します。

```
q="with love"~3
```

複合クエリでは、`phrase` 演算子を使用して、次のように一致するフレーズを指定します。

```
(phrase field=title 'star wars')
```

複合クエリであいまいフレーズ検索を実行するには、`near` 演算子を使用します。`near` 演算子を使用して、検索するフレーズと、フィールド内でどのくらい離れた用語まで一致と見なされるかを指定することができます。例えば、次のクエリでは、`title` フィールドで、用語の *star* と *wars* が 3 文字以上離れていないドキュメントを検索します。

```
(near field=title distance=3 'star wars')
```

詳細については、「[複合クエリの作成](searching-compound-queries.md)」を参照してください。

## Amazon CloudSearch でのリテラル文字列の検索
<a name="searching-text-literals"></a>

リテラルフィールドで文字列を検索する場合、Amazon CloudSearch は指定されたフィールドで、大文字/小文字の区別も含め検索文字列全体の完全一致を含むドキュメントのみを返します。例えば、`title` フィールドがリテラルフィールドとして設定されていて、*Star* を検索する場合、一致と見なされるためには、`title` フィールドの値が *Star* でなければなりません。*star*、*star wars*、および *a star is born* は検索結果に含まれません。これは、大文字と小文字が区別されず、指定された検索用語が任意の順序でフィールド内のどこにでも出現できるテキストフィールドの検索とは異なります。

リテラルフィールドを検索するには、検索文字列の前に、検索するリテラルフィールドの名前とコロンを付けます。検索文字列は一重引用符で囲む必要があります。例えば、次のクエリでは、リテラル文字列 *Sci-Fi* を検索します。

```
genres:'Sci-Fi'
```

この例では、各ドキュメントの genre フィールドを検索し、genre フィールドに *Sci-Fi* の値が含まれているすべてのドキュメントに一致します。一致と見なされるには、フィールド値が大文字/小文字の区別も含め、検索文字列と完全に一致する必要があります。例えば、genre フィールドに *Sci-Fi* という値が含まれるドキュメントは、*sci-fi* または *young adult sci-fi* を検索する場合は、検索結果に含まれません。

複合クエリでは、`term` 演算子構文を使用してリテラルフィールドを検索します。例えば、`(term field=genres 'Sci-Fi')` と指定します。詳細については、「[複合クエリの作成](searching-compound-queries.md)」を参照してください。

リテラルフィールドにファセットを組み合わせて使用することで、ファセット属性に基づいて結果をドリルダウンすることができます。ファセットの詳細については、「[Amazon CloudSearch でファセット情報を取得して使用](faceting.md)」を参照してください。

## Amazon CloudSearch でのプレフィックスの検索
<a name="searching-text-prefixes"></a>

`text`、`text-array`、`literal`、および `literal-array` フィールドで、用語全体ではなく*プレフィックス*を検索できます。この一致の結果には、プレフィックスとその後に 0 またはいくつかの文字が含まれます。プレフィックスとして少なくとも 1 文字を指定する必要があります。(すべてのドキュメントを一致させるには、構造化クエリで `matchall` 演算子を使用します。) 一般的に、大量のドキュメントが一致することがないように、2 文字以上のプレフィックスを使用する必要があります。

`text` または `text-array` フィールドを検索するときは、プレフィックスと一致する用語は、フィールドのコンテンツ内のどこにあっても検出できます。リテラルフィールドを検索するときは、プレフィックス文字列を含むそれ以降の検索文字列全体が完全に一致する必要があります。
+ 簡易クエリパーサー — `*` (アスタリスク) ワイルドカード演算子を使用してプレフィックスを検索します (例: `pre*`)。
+ 構造化クエリパーサー — `prefix` 演算子を使用してプレフィックスを検索します (例: `prefix 'pre'`)。

例えば、次のクエリでは、title フィールドで *oce* プレフィックスを検索し、ヒットしたタイトルを返します。

```
q=oce*&q.options={fields:['title']}&return=title
```

この検索をサンプルの映画データに対して実行した場合、*Ocean's Eleven* と *Ocean's Twelve* が返されます。

```
{

    "status": {
        "rid": "hIbIxb8oRAo6swY=",
        "time-ms": 2
    },
    "hits": {
        "found": 2,
        "start": 0,
        "hit": [
            {
                "id": "tt0240772",
                "fields": {
                    "title": "Ocean's Eleven"
                }
            },
            {
                "id": "tt0349903",
                "fields": {
                    "title": "Ocean's Twelve"
                }
            }
        ]
    }

}
```

複合クエリでは、`prefix` 演算子を使用してプレフィックスを検索します。例えば、`title` フィールドで *oce* プレフィックスを検索するには、次のように指定します。

```
q.parser=structured&q=(prefix field%3Dtitle 'oce')
```

URL エンコードに注意してください。詳細については、「[複合クエリの作成](searching-compound-queries.md)」を参照してください。

**注記**  
テキストフィールドでワイルドカード検索を実行するときは、 Amazon CloudSearch がインデックス作成中にテキストフィールドをトークン分割し、そのフィールドに設定された分析スキームに従ってステミングが実行されることに注意してください。Amazon CloudSearch は通常、検索クエリでも同じテキスト処理を実行します。ただし、ワイルドカード演算子 (\$1) または `prefix` 演算子を持つプレフィックスを検索するときは、プレフィックスに対してステミングは実行されません。つまり、`s` で終わるプレフィックスを検索すると、単数形の用語とは一致しないことになります。これは、複数形だけでなく末尾が `s` のあらゆる用語に適用される可能性があります。例えば、サンプル映画データの `actor` フィールドで `Anders` を検索した場合、一致する映画が 3 つあるとします。`Ander*` を検索した場合、それらの映画に加えて他のいくつかの映画が一致します。一方、`Anders*` を検索した場合、一致はありません。これは、用語が `ander` としてインデックスに格納されており、`anders` はインデックスにないためです。Amazon CloudSearch がテキストを処理する方法とそれが検索に与える影響の詳細については、「[Amazon CloudSearch でのテキスト処理](text-processing.md)」を参照してください。