Elasticsearchである地点から距離が近い順にソートしたい
調べると Geo Distance Sorting というのでできるみたい
以下のようなクエリになる
GET /_search { "sort" : [ { "_geo_distance" : { "pin.location" : [-70, 40], "order" : "asc", "unit" : "km", "mode" : "min", "distance_type" : "arc", "ignore_unmapped": true } } ], "query" : { "term" : { "user" : "kimchy" } } }
distance_type
は距離の計算方法で、arc
: 円弧 (デフォルト) かplane
: 平面のどちらか
これはPostgreSQLのgeometry
とgeography
の話と同じ
【PostgreSQL】地球は丸かった - UGA Boxxx
mode
はフィールドに複数のGEOポイントがある場合に指定する
デフォルトで昇順でソートする場合は最短距離が考慮され、降順でソートする場合は最長距離が考慮される
この他にmin
:最小、max
:最大、median
:中央値、avg
:平均を指定することができる