Amazon CloudSearch
開発者ガイド (API バージョン 2013-01-01)

Amazon CloudSearch での複合クエリの作成

structured クエリパーサーを使用すると、ブール演算子 andornot で一致式を結合することができます。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' のようにエンコードする必要があります。特殊文字が URL エンコードされていない場合、Amazon CloudSearch は InvalidQueryString エラーを返します。URL エンコードの詳細については、W3C の「HTML URL エンコードリファレンス」を参照してください。

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

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

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

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 より大きくする必要があります。

andornot に加えて、Amazon CloudSearch 構造化検索構文ではいくつかの専門演算子がサポートされています。

  • matchall—ドメイン内のすべてのドキュメントが一致します。構文: matchall.

  • near—あいまいフレーズクエリをサポート。distance 値には、フレーズ内の単語を分割できる単語の最大数を指定します。たとえば、(near field='plot' distance=4 'naval mutiny demonstration') のようにします。near 演算子を使用すると、指定した用語がごく近接していますが、隣接してはいないときに一致します。あいまいフレーズ検索の詳細については、「フレーズの検索」を参照してください。構文: (near field=FIELD distance=N boost=N 'STRING').

  • phrasetext または text-array フィールドでフレーズを検索します。たとえば、(phrase field="title" 'teenage mutant ninja') となります。式に一致するドキュメントの増強をサポートします。フレーズ検索の詳細については、「フレーズの検索」を参照してください。構文: (phrase field=FIELD boost=N 'STRING').

  • prefix—テキスト、テキスト配列、リテラル、リテラル配列フィールドで指定されたプレフィックス単独またはその後に文字が続くものを検索します。たとえば、(prefix field='title' 'wait') となります。式に一致するドキュメントの増強をサポートします。プレフィックス検索の詳細については、「プレフィックスの検索.構文: (prefix field=FIELD boost=N 'STRING')」を参照してください。

  • range—数値フィールドで値の範囲を検索。例: (range field=year [2000,2013])。範囲検索の詳細については、「値の範囲の検索」を参照してください。構文: (range field=FIELD boost=N RANGE).

  • term—任意のフィールドで個々の用語または値を検索。例: (and (term field=title 'star')(term field=year 1977))。構文: (term field=FIELD boost=N 'STRING'|VALUE).

特定のデータタイプの検索の詳細については、次のセクションを参照してください。構造化検索構文の詳細については、「構造化検索構文」を参照してください。