UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Elasticsearch】近い順にソートしたい

Elasticsearchである地点から距離が近い順にソートしたい

調べると Geo Distance Sorting というのでできるみたい

www.elastic.co

以下のようなクエリになる

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: 平面のどちらか

これはPostgreSQLgeometrygeographyの話と同じ
【PostgreSQL】地球は丸かった - UGA Boxxx

modeはフィールドに複数のGEOポイントがある場合に指定する

デフォルトで昇順でソートする場合は最短距離が考慮され、降順でソートする場合は最長距離が考慮される

この他にmin:最小、max:最大、median:中央値、avg:平均を指定することができる