UGA Boxxx

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

【Elasticsearch】Javaでgeo_distanceクエリを使う

ESのgeo_distanceクエリで、ある指定した中心からの距離で検索かけたい

GET /my_locations/_search
{
    "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
            "filter" : {
                "geo_distance" : {
                    "distance" : "200km",
                    "location" : {
                        "lat" : 40,
                        "lon" : -70
                    }
                }
            }
        }
    }
}

これをJavaのElasticsearch RestHighLevelClientライブラリを使って行いたい

www.elastic.co

実装はこのような感じ

    SearchSourceBuilder ssb = new SearchSourceBuilder();
    BoolQueryBuilder boolQuery = boolQuery();
    GeoDistanceQueryBuilder geoDistanceFilter = geoDistanceQuery("location")
          .point(40, -70)
          .distance("200km");
    boolQuery.filter(geoDistanceFilter);
    ssb.query(boolQuery);

他参考

https://uga-box.hatenablog.com/entry/2020/02/28/000000

https://www.codeflow.site/ja/article/elasticsearch-geo-spatial