

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

# Amazon CloudSearch での複合クエリの作成
<a name="searching-compound-queries"></a>

structured クエリパーサーを使用すると、ブール演算子 `and`、`or`、`not` で一致式を結合することができます。structured クエリパーサーを選択するには、クエリに `q.parser=structured` を含めます。構造化クエリ演算子は、*prefix* 演算子として指定されます。構文は次のとおりです。
+ `(and boost=N EXPRESSION1 EXPRESSION2 ... EXPRESSIONn)`
+ `(or boost=N EXPRESSION1 EXPRESSION2 ... EXPRESSIONn)`
+ `(not boost=N EXPRESSION)`

例えば、次のクエリは、サンプルデータセット内でタイトルに *star* が含まれ、`actors` フィールドに Harrison Ford または William Shatner のいずれかの名前があり、Zachary Quinto の名前のないすべての映画と一致します。

```
(and title:'star' (or actors:'Harrison Ford' actors:'William Shatner')(not actors:'Zachary Quinto'))
```

構造化クエリ演算子を使用するときは、演算子の名前、演算子のオプション、および操作対象の一致式を `(OPERATOR OPTIONS EXPRESSION)` のように指定します。一致式には、単純な文字列または複合クエリのサブクラスを使用できます。オプションは語句の前に指定する必要があります。例えば、`(and (not field=genres 'Sci-Fi')(or (term field=title boost=2 'star')(term field=plot 'star')))` と指定します。

式の評価の順番は、括弧で制御します。式を括弧で囲んだ場合、その式が最初に評価され、その結果の値が複合クエリの残り部分の評価に使用されます。

**重要**  
クエリ文字列の特殊文字は、URL エンコードする必要があります。例えば、構造化クエリでの `=` 演算子は、`%3D`: `(term+field%3Dtitle+'star'` としてエンコードする必要があります。) Amazon CloudSearch では、特殊文字が URL エンコードされていないと `InvalidQueryString` エラーになります。URL エンコードの詳細については、W3C の[「HTML URL エンコードリファレンス」](http://www.w3schools.com/tags/ref_urlencode.asp)を参照してください。

例えば、次のクエリは `title` フィールドを検索対象として語句 `star wars` を検索し、`year` フィールドの値が 2000 より小さいものを除外します。

```
(and (phrase field='title' 'star wars') (not (range field=year {,2000})))
```

この検索リクエストを送信するには、クエリ文字列をエンコードして、`structured` パラメータをつけた `q.parser` クエリパーサーを指定します。

```
http://search-movies-rr2f34ofg56xneuemujamut52i.us-east-1.cloudsearch.
amazonaws.com/2013-01-01/search?q=(and+(phrase+field='title'+'star wars')+(not+(range+field%3Dyear+{,2000})))&q.parser=structured
```

構造化クエリの構文を使用すると、複数のフィールドに対する検索を結合できます。検索するフィールドを指定しない場合は、すべての `text` および `text-array` フィールドが検索されます。例えば、次のクエリでは、すべての `text` および `text-array` フィールドで用語 *star (主役)* を検索し、`actors` フィールドで *Zachary Quinto (ザカリー・クイント)* を含むドキュメントは除外されます。

```
(and 'star' (not actors:'Zachary Quinto'))
```

`boost` 値を指定して、複合クエリのある式の重要度を他より高くすることができます。boost 値は一致ドキュメントのスコアを高くします。例えば、次のクエリでは、*star* という用語が `description` フィールドではなく `title` フィールドに存在している場合、一致の重要度が高くなります。

```
(and (range field=year [2013,}) (or (term field=title boost=2 'star') (term field=plot 'star')) 
```

Boost 値は 0 より大きくする必要があります。

`and`、`or`、`not` に加えて、Amazon CloudSearch 構造化検索構文ではいくつかの専門演算子がサポートされています。
+ `matchall` — ドメイン内のすべてのドキュメントが一致します。構文: `matchall`。
+ `near` — あいまいフレーズクエリをサポート。`distance` 値には、フレーズ内の単語を分割できる単語の最大数を指定します。例えば、`(near field='plot' distance=4 'naval mutiny demonstration')` のようにします。`near` 演算子を使用すると、指定した用語がごく近接していますが、隣接してはいないときに一致します。あいまいフレーズ検索の詳細については、「[フレーズの検索](searching-text.md#searching-text-phrases)」を参照してください。構文: `(near field=FIELD distance=N boost=N 'STRING')`。
+ `phrase` — `text` または `text-array` フィールドでのフレーズの検索。例えば、`(phrase field="title" 'teenage mutant ninja')` です。式に一致するドキュメントの増強をサポートします。フレーズ検索の詳細については、「[フレーズの検索](searching-text.md#searching-text-phrases)」を参照してください。構文: `(phrase field=FIELD boost=N 'STRING')`。
+ `prefix` — テキスト、テキスト配列、リテラル、リテラル配列フィールドで指定されたプレフィックス単独またはその後に文字が続くものを検索します。例えば、 となります。`(prefix field='title' 'wait')`式に一致するドキュメントの増強をサポートします。プレフィックス検索の詳細については、「[プレフィックスの検索](searching-text.md#searching-text-prefixes).構文: `(prefix field=FIELD boost=N 'STRING')`」を参照してください。
+ `range` — 数値フィールドで値の範囲を検索。例: `(range field=year [2000,2013])`。範囲検索の詳細については、「[値の範囲の検索](searching-ranges.md)」を参照してください。構文: `(range field=FIELD boost=N RANGE)`。
+ `term` — 任意のフィールドで個々の用語または値を検索。例: `(and (term field=title 'star')(term field=year 1977))`。構文: `(term field=FIELD boost=N 'STRING'|VALUE)`。

特定のデータタイプの検索の詳細については、次のセクションを参照してください。構造化検索構文の詳細については、「[構造化検索構文](search-api.md#structured-search-syntax)」を参照してください。