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

ステップ 3: Amazon CloudSearch ドメインを検索する

Amazon CloudSearch コンソールで検索テスターを使用してサンプル検索リクエストを送信し、その結果を表示できます。ウェブブラウザから、または cURL を使用して、サンプル検索リクエストを送信することもできます。アプリケーションで、任意の HTTP ライブラリを使用して、検索トラフィックを Amazon CloudSearch ドメインに送信できます。

検索テスターによる検索

Amazon CloudSearch コンソールの検索テスターを使用すると、サポートされるクエリパーサー(simple、structured、lucene、dismax)のいずれかを使用してサンプルの検索リクエストを送信することができます。デフォルトでは、リクエストは simple クエリパーサーを使用して処理されます。指定パーサーに対するオプションの指定、フィルタリング、結果の並べ替え、設定されたファセットの参照が可能です。検索ヒットは、検索結果で自動的にハイライト表示されます。実行方法の詳細については、「Amazon CloudSearch で検索ヒットをハイライト」を参照してください。[Search] フィールドに用語を入力する際に、サジェスタを選択し、候補を取得することもできます。(候補を取得するには、あらかじめサジェスタを設定する必要があります。詳細については、「Amazon CloudSearch での自動入力候補の取得 」を参照してください。)

デフォルトでは、自動的に生成された関連性スコア _score に従って、結果がソートされます。結果のランク付け方法のカスタマイズについて詳しくは、「Amazon CloudSearch での結果のソート」を参照してください。

ドメインを検索するには

  1. Amazon CloudSearch console at https://console.aws.amazon.com/cloudsearch/homeに移動します。

  2. [Navigation]パネルで、映画ドメインの名前をクリックし、[Run a Test Search] リンクをクリックします。

  3. 単純なテキストの検索を実行するには、検索するテキストを入力し、[Go] をクリックします。デフォルトでは、すべての text および text-array フィールドが検索されます。

  4. 特定のフィールドを検索するには、[More Parameters] リンクをクリックし、[Search Fields] フィールドに、検索するフィールドをコンマで区切ったリストを入力します。キャレット(^)を使用して各フィールドに重みを追加し、検索結果での各フィールドの相対的な重要度を制御することができます。たとえば、title^5, description を指定すると、一致する各ドキュメントの関連性スコアを計算するときに、title フィールド内のヒットに description フィールド内のヒットの 5 倍の重みを付加します。

  5. 構造化クエリ構文を使用するには、[Query Parser] メニューから [Structured] を選択します。structured クエリパーサーを選択したら、[Search] フィールドに構造化クエリを入力し、[Go] をクリックします。たとえば、2000 年以前にリリースされた、タイトルに star を含むすべての映画を検出するには、次のように入力します。(and title:'star' year:{,2000])。詳細については、「複合クエリの作成」を参照してください。Lucene または DisMax のクエリを送信するには、適切なクエリパーサーを選択します。

選択したクエリパーサーに追加のオプションを指定して、クエリで使用できるデフォルトの演算子とコントロールを設定することができます。詳細については、「検索リクエストのパラメータ」を参照してください。

ドメインの検索エンドポイントに送信された HTTP 検索リクエストと Amazon CloudSearch によって返されたレスポンスを表示するには、表示するレスポンスフォーマットに対応する [view raw] リンクをクリックします。

リクエスト URL をコピーして貼り付け、リクエストを送信して、ウェブブラウザから応答を表示することもできます。リクエストは、HTTP または HTTPS 経由で送信できます。

ウェブブラウザからの検索リクエストの送信

任意のウェブブラウザから検索エンドポイントに検索リクエストを直接送信できます。任意のクエリパーサー(simple、structured、lucene、または dismax)を使用し、さまざまなオプションを指定して、検索の制約、ファセット情報のリクエスト、ランク付けのカスタマイズ、および結果で返される情報の制御を行うことができます。

たとえば、movies ドメインを検索し、利用できるすべての Star Wars 映画のタイトルを取得するには、検索エンドポイントに次の検索文字列を追加します。(2013-01-01 は API のバージョンであり、指定する必要があります)。

/2013-01-01/search?q=star+wars&return=title

注記

ドメインの検索エンドポイントは、ドメインのダッシュボードに表示されます。AWS マネジメントコンソールから検索を実行して、生のリクエストと応答を表示し、[Search Request] フィールドからリクエストの URL をコピーすることもできます。ドメインの検索およびドキュメントのサービスエンドポイントは、ドメインが存在している間変わりません。

デフォルトでは、Amazon CloudSearch は JSON 形式で応答を返します。また、format パラメータを format=xml のように指定して、検索結果を XML 形式で取得できます(エラーは、発生した場所によって、JSON または XML で返すことができます)。

数値フィールドの検索

構造化クエリ構文 q.parser=structured を使用して、特定の数値属性を持つドキュメントを 見つけることができます。任意の数値フィールド(doubledouble-arrayintint-array)内の正確な値または値の範囲を検索できます。範囲を検索するには、上限と下限をカンマで区切って指定し、範囲を角括弧または中括弧で囲みます。上限と下限を含める場合は角括弧([、])を使用し、上限と下限を除外する場合は中括弧()を使用します。以下に例を示します。

  • year:2000 は、year フィールドの値が 2000 であるドキュメントに一致します。

  • year:[2000,} は、year フィールドの値が 2000 以上であるドキュメントに一致します

  • year:{,2000] は、year フィールドの値が 2000 以下であるドキュメントに一致します

  • year:[2000,2011]は、year フィールドの値が 2000 ~ 2011(両端の値を含む)のドキュメントに一致します。

  • year:{2000,2011} は、year フィールドの値が 2000 ~ 2011(両端の値を含まない)のドキュメントに一致します

日付フィールドで特定の日付または日付範囲を検索することもできますが、次のように各日付文字列を一重引用符で囲む必要があります。release_date:['2000-01-01T00:00:00Z','2011-01-01T00:00:00Z']

たとえば、次の構造化クエリでは、title フィールドに "star" が含まれている 2000 年よりも前にリリースされた一致する映画がすべて検出され、それぞれのタイトル、年、および関連性スコアが返されます。

q=(and title:'star' year:{,2000])&q.parser=structured&return=title,year,_score

応答には、リクエストのステータス、一致するドキュメントの数、各ヒットについてリクエストされたフィールドが表示されます。

{ "status": { "rid": "hLPckLsoEQoELQo=", "time-ms": 2 }, "hits": { "found": 15, "start": 0, "hit": [ { "id": "tt0076759", "fields": { "title": "Star Wars", "year": "1977", "_score": "5.7601414" } }, . . . { "id": "tt0088170", "fields": { "title": "Star Trek III: The Search for Spock", "year": "1984", "_score": "4.2371693" } } ] } }

検索クエリの作成の詳細については、「Amazon CloudSearch でのデータの検索」を参照してください。

検索結果のソート

デフォルトで、Amazon CloudSearch は、自動的に生成された関連性の _score に従って検索結果をソートします。結果のランク付けの方法を変更するには、検索リクエストで sort パラメータを使用して、ランク付けに使用するフィールドまたは式を指定します(式は、一致するドキュメントのセット内の各ドキュメントについて評価できるカスタム数値式です。独自の式の定義については、「式の設定」を参照してください)。

sort パラメータでテキストフィールドを指定した場合、結果はそのフィールドのアルファベット順にソートされます。たとえば、movies ドメインの検索結果をタイトルのアルファベット順にソートするには、クエリ文字列に &sort=title asc を追加します。

2013-01-01/search?q=(and genres:'Sci-Fi' year:{,2000])&q.parser=structured&return=title,year&sort=title asc

ソート方向は、asc(昇順)または desc(降順)で明示的に指定する必要があることに注意してください。アルファベット順にソートすると、Amazon CloudSearch は Unicode のコードポイントで並べ替えます。つまり、数字が文字の前に、大文字が小文字の前に来ます。数は文字列としてソートされ、たとえば 10 は 2 の前に来ます。

同様に、sort パラメータで整数フィールドを指定して、結果を数値でソートすることができます。

フィールドまたは式のカンマ区切りリストを指定する場合は、最初のフィールドまたは式はプライマリソート条件として使用され、2 番目はセカンダリソート条件として使用され、以降も同様です。

結果のランク付けの詳細については、「Amazon CloudSearch での結果のソート」を参照してください。

ファセット情報の取得

ファセットとは、検索結果の絞り込みとフィルタ処理を行うために使用するカテゴリを表すインデックスフィールドです。Amazon CloudSearch に検索リクエストを送信すると、ファセット情報をリクエストして、ファセットで同じ値を共有するヒット数を調べることができます。この情報を検索結果と共に表示して、それを利用して対話的に検索結果を絞り込むことができます。(これは多くの場合、ファセットナビゲーションまたはファセット検索と呼ばれます)。

ファセットは、ドメイン設定でファセットが有効になっている任意の日付、リテラル、数値フィールドのいずれかです。Amazon CloudSearch は、ファセットごとに同じ値を共有するヒット数を計算します。ファセット値の特定のサブセットについてファセット数を計算するにバケットを定義できます。ファセットの結果には、一致があるバケットのみが含まれています。

検索結果を使用してファセット数を取得するには

  • ファセットを計算するフィールドを指定するには、facet.FIELD オプションを使用します。サンプル IMDb の movies データの場合、次のフィールドについてファセットが有効になっています。genresrankratingrelease_daterunning_time_secsyear。ファセットオプションは、JSON オブジェクトとして指定されます。JSON オブジェクトが空の場合(facet.FIELD={})、ファセット数はすべてのフィールド値について計算され、ファセットはファセット数によってソートされ、上位 10 個のファセットが結果で返されます。

    q=star&return=title&facet.genres={}

ファセットは、結果のヒットの下に表示されます。

facets": { "genres": { "buckets": [ {"value": "Comedy","count": 41}, . . . {"value": "Sport", "count": 7} ] } }

オプションを指定することによって、選択したフィールド値のファセットの計算、結果に含めるファセット値の最大数の指定、ファセットのソート方法の制御を行うことができます。

選択したフィールド値のファセット数を計算するバケットを定義するには、buckets オプションを使用します。たとえば、次のリクエストは、year フィールドのファセット数を 10 年ごとにソートします。

q=star&facet.year={buckets:["[1970,1979]","[1980,1989]","[1990,1999]"]}

これによって、ファセット数を 3 つの指定された範囲に制限します。

"facets": { "year": { "buckets": [ {"value": "[1970,1979]", "count": 3}, {"value": "[1980,1989]","count": 7}, {"value": "[1990,1999]","count": 12} ] } }

ファセットオプションの指定の詳細については、「Amazon CloudSearch でファセット情報を取得して使用」を参照してください。

検索ハイライトの取得

検索ハイライトは、フィールド内で検索用語が発生する場所を示すテキストまたはテキスト配列フィールドの一部です。

検索結果と共にハイライト情報を取得するには

  • ハイライトを取得するテキストまたはテキスト配列フィールドを指定するには、highlight.FIELD オプションを使用します。このフィールドは、ドメインのインデックス作成オプションでハイライトが有効になっている必要があります。サンプル IMDb の movies データの場合、次のフィールドについてハイライトが有効になっています。actorsdirectorsplottitle。ハイライトオプションは、JSON オブジェクトとして指定されます。JSON オブジェクトが空である場合(highlight.FIELD={})、Amazon CloudSearch では検索用語のすべての出現箇所を HTML の強調タグで囲む(<em>term</em>)ことでハイライトし、抜粋は HTML として返されます。

    q=title:'star'&q.parser=structured&return=_no_fields&highlight.title={}

ハイライト情報は、各検索ヒットと共に含まれています。

hits": { "found": 29, "start": 0, "hit": [ { "id": "tt0796366", "highlights": { "title": "<em>Star</em> Trek" } }, . . . { "id": "tt2488496", "highlights": { "title": "<em>Star</em> Wars: Episode VII" } } ] }

ハイライトオプションの指定の詳細については、「Amazon CloudSearch で検索ヒットをハイライト」を参照してください。