ElasticSearch经纬度相关查询

1、最近点查询

官方地址

POST /index/_search
{
  "sort": [
    {
      "_geo_distance": {
        "location": { 
          "lat":  33,
          "lon": 111
        },
        "order":         "asc",
        "unit":          "km", 
        "distance_type": "plane" 
      }
    }
  ]
}

java代码

import io.searchbox.client.JestClient;
import io.searchbox.core.Search;
import io.searchbox.core.SearchResult;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.GeoDistanceSortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        GeoDistanceSortBuilder sortBuilder = SortBuilders.geoDistanceSort("location", "")
                    .point(33, 111)
                    .unit(DistanceUnit.METERS)
                    .order(SortOrder.ASC);
        searchSourceBuilder.sort(sortBuilder);
        searchSourceBuilder.from(0);
        searchSourceBuilder.size(1);
        String query = searchSourceBuilder.toString();
        Search search = new Search.Builder(query).addIndex(LccWgsModel.ESINDEX).build();
        SearchResult result = jestClient.execute(search);
        List<LccWgsModel> dataList = result.getSourceAsObjectList(LccWgsModel.class, true);
        System.out.println(dataList.size());
        System.out.println(new Gson().toJson(dataList));

报错的话直接query字符串查询

String query = "{\"from\":0,\"size\":1,\n" +
                " \"sort\": [\n" +
                "        {\n" +
                "            \"_geo_distance\": {\n" +
                "                \"location\": [\n" +
                "                    {\n" +
                "                        \"lat\": 33,\n" +
                "                        \"lon\": 111\n" +
                "                    }\n" +
                "                ],\n" +
                "                \"unit\": \"km\",\n" +
                "                \"distance_type\": \"plane\",\n" +
                "                \"order\": \"asc\",\n" +
                "                \"validation_method\": \"STRICT\"\n" +
                "            }\n" +
                "        }\n" +
                "    ]\n" +
                "}";

2、圆形和圆环查询

官方地址

GET /attractions/restaurant/_search
{
    "query": {
        "geo_distance": {
            "distance": 10000,
            "location": {
                "lat": 24.46,
                "lon": 118.1
            }
        }
    }
}

匹配那些距离中心点大于等于 1km 而小于 2km 的位置

GET /attractions/restaurant/_search
{
  "query": {
    "filtered": {
      "filter": {
        "geo_distance_range": {
          "gte":    "1km", 
          "lt":     "2km", 
          "location": {
            "lat":  40.715,
            "lon": -73.988
          }
        }
      }
    }
  }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值