Elasticsearch搜索附近的人

来源:互联网 发布:淘宝api 商品列表接口 编辑:程序博客网 时间:2024/04/28 06:14
String lat = request.getParameter("lat");String lon = request.getParameter("lon");if (Strings.isNotEmpty(lat) && Strings.isNotEmpty(lon)) {    SearchRequestBuilder srb = elasticSearchClient.prepareSearch("weidif").setTypes("product");    //查询数量,1000条    srb.setFrom(0).setSize(1000);    //查询相距小于等于50KM数据    FilterBuilder builder = geoDistanceRangeFilter("location")            .point(Double.parseDouble(lon), Double.parseDouble(lat))            .lte(50 + "km");    srb.setPostFilter(builder);    GeoDistanceSortBuilder sort = SortBuilders.geoDistanceSort("location");    sort.unit(DistanceUnit.METERS);    sort.order(SortOrder.ASC);    sort.point(Double.parseDouble(lon), Double.parseDouble(lat));    srb.addSort(sort);    SearchResponse searchResponse = srb.execute().actionGet();    SearchHits hits = searchResponse.getHits();    SearchHit[] searchHists = hits.getHits();    for (SearchHit hit : searchHists) {        String name = (String) hit.getSource().get("name");        HashMap<String, Object> location = (HashMap<String, Object>) hit.getSource().get("location");        BigDecimal geoDis = new BigDecimal((Double) hit.getSortValues()[0]);        Map<String, Object> hitMap = hit.getSource();        hitMap.put("geoDistance", geoDis.setScale(0, BigDecimal.ROUND_HALF_DOWN));        System.out.println(name + location + ",相距:" + hit.getSource().get("geoDistance") + "m");    }}
0 0