Amazon でのテキストの検索 CloudSearch - Amazon CloudSearch

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

Amazon でのテキストの検索 CloudSearch

テキストとリテラルの両方のフィールドで、テキスト文字列を検索できます。

  • Text および text-array フィールドは、常に検索可能です。個々の用語だけでなくフレーズも検索できます。text および text-array フィールド内の検索では、大文字と小文字は区別されません。

  • Literal および literal-array フィールドは、ドメインのインデックスオプションで検索を有効にしている場合のみ検索できます。検索文字列の完全一致を検索することができます。リテラルフィールドの検索では、大文字/小文字が区別されます。

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

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

Amazon での個々の用語の検索 CloudSearch

および text-arrayフィールドで個々の用語を検索するtextと、Amazon は指定されたフィールド内の任意の場所で、任意の順序で検索用語を含むすべてのドキュメント CloudSearch を検索します。例えば、サンプルの映画データで、title フィールドは text フィールドとして設定されています。title フィールドで star を検索すると、starstar warsa 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 で検索すると、starwars の両方、または trek という用語を含むドキュメントが取得されます。

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

(and 'star' 'wars')

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

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

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

Amazon でのフレーズの検索 CloudSearch

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

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

q="with love"

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

q="with love"~3

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

(phrase field=title 'star wars')

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

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

詳細については、「複合クエリの作成」を参照してください。

Amazon でのリテラル文字列の検索 CloudSearch

リテラルフィールドで文字列を検索すると、Amazon は、大文字と小文字を含め、指定されたフィールドの完全な検索文字列と完全に一致するドキュメントのみ CloudSearch を返します。例えば、title フィールドがリテラルフィールドとして設定されていて、Star を検索する場合、一致と見なされるためには、title フィールドの値が Star でなければなりません。starstar 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') です。詳細については、「複合クエリの作成」を参照してください。

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

Amazon でのプレフィックスの検索 CloudSearch

texttext-arrayliteral、および 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 ElevenOcean'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 エンコードに注意してください。詳細については、「複合クエリの作成」を参照してください。

注記

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