Amazon CloudSearch での地理的位置による検索および結果のランク付け - アマゾン CloudSearch

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

Amazon CloudSearch での地理的位置による検索および結果のランク付け

latlon フィールドを使用してドキュメントデータに位置情報を保存する場合、Amazon CloudSearch の式で haversin 関数を使用して 2 つの位置の距離を計算できます。ドキュメントデータと共に位置情報を保存することによって、簡単に特定の地域内の検索を実行することもできます。

Amazon CloudSearch での地域内の検索

検索ドキュメントに位置情報を関連付けるには、10 進表記を使用して latlon フィールドに位置の緯度と経度を保存できます。値はカンマ区切りリスト lat,lon で指定され、例えば、35.628611,-120.694152 のように指定します。ドキュメントと位置情報を関連付けることによって、fq パラメータを使って、簡単に検索ヒットを特定の地域に制限することができます。

境界ボックスを使用して結果を特定の地域に制限するには
  1. 対象とする地域の左上隅と右下隅の緯度と経度を特定します。

  2. その境界ボックスの座標を使用して、一致するドキュメントをフィルタするには、fq パラメータを使用します。例えば、各ドキュメントに location フィールドを含める場合、fq=location:['nn.n,nn.n','nn.n,nn.n'] のように境界ボックスフィルタを指定することができます。次の例では、restaurant の一致がフィルタされ、カリフォルニア州パソロブレス市​のダウンタウンエリア内の一致のみが結果に含まれます。

    q='restaurant'&fq=location:['35.628611,-120.694152','35.621966,-120.686706']&q.parser=structured

Amazon CloudSearch での距離による結果のソート

検索リクエストの一部として式を定義して、距離で結果をソートできます。Amazon CloudSearch 式は、haversin 関数をサポートします。この関数は、各点の緯度と経度を使用して、球上の 2 つのポイント間の大円距離を計算します。(詳細については、半正矢関数の公式を参照してください)。結果の距離は km 単位で返されます。

一致する各ドキュメントとユーザーとの距離を計算するには、ユーザーの位置情報を haversin 関数に渡し、latlon フィールドに保存されたドキュメントの位置情報を参照します。10 進表記でユーザーの緯度と経度を指定し、latlon に保存された緯度と経度に、FIELD.latitudeFIELD.longitude を使ってアクセスします。例えば、expr.distance=haversin(userlat,userlon, location.latitude,location.longitude) です。

式を使用して検索結果をソートするには、sort パラメータを指定します。

例えば、次のクエリは、レストランを検索し、ユーザーからの距離によって結果をソートします。

q=restaurant&expr.distance=haversin(35.621966,-120.686706,location.latitude,location.longitude)&sort=distance asc

明示的にソート方向 (asc または desc) を指定する必要があることに注意してください。

return パラメータで式の名前を指定することよって、各ドキュメントについて計算された距離を検索結果に含めることができます。例えば、return=distance です。

ドキュメントの関連性 _score など、他の特性を考慮するより複雑な式で距離の値を使用することもできます。以下の例で、2 番目の rank 式では、ドキュメントの計算された distance とその関連性 _score の両方を使用します。

expr.distance=haversin(38.958687,-77.343149,latitude,longitude)&expr.myrank=_score/log10(distance)&sort=myrank+desc
ヒント

これらのサンプルクエリを機能させるには、latlonフィールドでインデックスを設定し、ドキュメント内に location データがなければなりません。

{ "fields": { "location": "40.05830,-74.40570" } }

このフィールドが存在しない場合、検索を実行すると次のエラーメッセージが表示される可能性があります。

Syntax error in query: field (location) does not exist.

式を使用した検索結果のソートの詳細については、「検索結果の制御」を参照してください。