Spring boot 如何在弹性搜索中使用经纬度搜索位置附近的区域
我想通过我的弹性搜索搜索,搜索所有附近的位置,给定一对lat-long,它有两个单独的纬度和经度列。Spring boot 如何在弹性搜索中使用经纬度搜索位置附近的区域,spring-boot,
elasticsearch,geolocation,latitude-longitude,Spring Boot,
elasticsearch,Geolocation,Latitude Longitude,我想通过我的弹性搜索搜索,搜索所有附近的位置,给定一对lat-long,它有两个单独的纬度和经度列。 如何执行此操作您必须使用地理距离查询。请查找下面的代码片段(使用Elasticsearch REST高级客户端,用Java编写) 仅供参考:我的网站上提供了完整的教程:->ElasticSearch 6–使用RestHighLevelClient和Java进行空间查询–第1部分:地理距离查询 public Set<?> geoDistanceQuery(String inde
如何执行此操作您必须使用地理距离查询。请查找下面的代码片段(使用Elasticsearch REST高级客户端,用Java编写) 仅供参考:我的网站上提供了完整的教程:->ElasticSearch 6–使用RestHighLevelClient和Java进行空间查询–第1部分:地理距离查询
public Set<?> geoDistanceQuery(String index, String nameGeoPointField, double lat, double lon, double distance, EsQuery esQuery) throws IOException {
Date startDate = new Date();
Set<Object> objectsWithinDistance = new LinkedHashSet<>();
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
QueryBuilder geoDistanceQueryBuilder = QueryBuilders
.geoDistanceQuery(nameGeoPointField)
.point(lat, lon)
.distance(distance, DistanceUnit.KILOMETERS);
BoolQueryBuilder boolQuery = getBooleanQueryWithConditions(esQuery);
QueryBuilder completeQuery = QueryBuilders
.boolQuery()
.must(boolQuery)
.filter(geoDistanceQueryBuilder);
sourceBuilder.query(completeQuery).size(SIZE_ES_QUERY);
SearchRequest searchRequest = new SearchRequest(index)
.source(sourceBuilder.sort(SortBuilders.geoDistanceSort(nameGeoPointField, lat, lon)
.order(SortOrder.ASC)
.unit(DistanceUnit.KILOMETERS)));
SearchResponse searchResponse = restClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
for (SearchHit hit : hits.getHits()) {
objectsWithinDistance.add(GeoService.getObjectFrom_ES_Hit(hit, nameGeoPointField));
}
return timedReturn(LOGGER, new Object() {}.getClass().getEnclosingMethod().getName(), startDate.getTime(), objectsWithinDistance);
}
public Set geoDistanceQuery(字符串索引、字符串名称geopointfield、双lat、双lon、双距离、EsQuery-EsQuery)引发IOException{
日期开始日期=新日期();
Set objectsWithinDistance=new LinkedHashSet();
SearchSourceBuilder sourceBuilder=新的SearchSourceBuilder();
QueryBuilder地理距离QueryBuilder=QueryBuilder
.geoDistanceQuery(名称地理点字段)
.点(横向、纵向)
.距离(距离,距离单位为公里);
BoolQueryBuilder boolQuery=getBooleanQueryWithConditions(esQuery);
QueryBuilder completeQuery=QueryBuilders
.boolQuery()
.must(boolQuery)
.过滤器(地理距离查询生成器);
sourceBuilder.query(completeQuery).size(size\u ES\u查询);
SearchRequest SearchRequest=新的SearchRequest(索引)
.source(sourceBuilder.sort(SortBuilders.geoDistanceSort(nameGeoPointField,lat,lon)
.order(SortOrder.ASC)
.单位(距离单位,公里);;
SearchResponse SearchResponse=restClient.search(searchRequest,RequestOptions.DEFAULT);
SearchHits=searchResponse.getHits();
for(SearchHit:hits.getHits()){
添加(GeoService.getObjectFrom_ES_Hit(Hit,nameGeoPointField));
}
返回timedReturn(记录器,新对象(){}.getClass().GetEnclosuringMethod().getName(),startDate.getTime(),ObjectSwithinInstance);
}
Link死了。