我想通过 Elasticsearch 来搜索所有给定的经纬度附近的所有位置,该纬度有两个单独的纬度和经度列。
这该怎么做
最佳答案
您将必须使用geoDistanceQuery。请在下面找到代码片段(使用Elasticsearch REST高级客户端以Java编写)。
仅供引用:在我的网站上可以找到完整的教程:www.ictdynamic.be-> ElasticSearch 6 –使用RestHighLevelClient和Java的空间查询–第1部分:geoDistanceQuery
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);
}
关于spring-boot - 如何在 Elasticsearch 中使用经度搜索位置附近的区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58535078/