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"); } }
Elasticsearch搜索附近的人
最新推荐文章于 2021-02-21 08:46:31 发布