位置情報検索

インデックス生成時に各ドキュメントへ緯度・経度の位置情報を付加しておくことで、検索時に指定した地点からの距離を条件とした絞り込みが可能になります。

概要

位置情報検索では、指定した地点(緯度・経度)を中心とする半径内に含まれるドキュメントだけを検索結果に含めます。この絞り込みは OpenSearch の geo_distance クエリを利用したフィルターとして適用されるため、スコア(関連度)には影響しません。また、距離による並べ替えには対応していません。

位置情報を格納するフィールドは、OpenSearch のマッピングで geo_point 型として定義されている必要があります。標準では location フィールドが geo_point 型として用意されています。ただし、location フィールドへ値を格納する処理は標準では用意されていないため、データストアクロールのフィールドマッピングやスクリプト、検索エンジンへドキュメントを登録する API などを用いて、利用者側で位置情報を格納する必要があります。

利用方法

位置情報検索は、検索リクエストに以下のパラメーターを付加して指定します。標準では location フィールドに対して利用できます。

パラメーター 説明
geo.<fieldname>.point 中心となる地点の緯度・経度を 緯度,経度 の形式で指定します。値は10進数の度(Double 型)で、カンマ区切りで2つの数値を指定します。例: 35.681236,139.767125
geo.<fieldname>.distance 中心地点からの距離(半径)を指定します。例: 10km

表: リクエストパラメーター

<fieldname> には位置情報を格納したフィールド名を指定します。指定できるのは query.geo.fields に登録されているフィールドのみで、標準では location です。それ以外のフィールドを利用する場合は、geo_point 型としてマッピングした上で、fess_config.propertiesquery.geo.fields にカンマ区切りで追加します。

たとえば、緯度 35.681236・経度 139.767125(東京駅付近)から半径10km以内のドキュメントを検索する場合は、検索リクエストに以下のパラメーターを付加します。

geo.location.point=35.681236,139.767125&geo.location.distance=10km

距離の単位

geo.<fieldname>.distance の値は OpenSearch の距離単位として解釈されます。km(キロメートル)のほか、mmcmminftydmi(マイル)、nmi(海里)などが利用できます。単位を省略して数値のみを指定した場合はメートルとして扱われます(例: 500 は500メートル)。

複数指定

  • 同一フィールドに対して geo.<fieldname>.point を複数指定した場合、いずれかの地点の半径内に含まれるドキュメントが検索されます(OR 条件)。

  • 異なるフィールドに対してそれぞれ位置情報を指定した場合、すべての条件を満たすドキュメントが検索されます(AND 条件)。

注釈

geo.<fieldname>.pointgeo.<fieldname>.distance は両方を指定する必要があります。distance が指定されていない場合、その point の条件は無視されます。また、point の値が 緯度,経度 の形式(カンマ区切りの2つの数値)でない場合や、数値として解釈できない場合はエラーになります。