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")
;
}
}
转载请注明原文地址: https://ju.6miu.com/read-1308848.html