不知道“我知道我可以通过编程方式执行此操作”的确切含义,但是通过使用 geoDistanceQuery ,您可以优化查询(但是仍然可以通过编程方式进行)。
请在下面找到Java代码段。希望这会有所帮助,让我知道您何时需要其他信息。
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();
BoolQueryBuilder boolQuery = getBooleanQueryWithConditions(esQuery);
QueryBuilder geoDistanceQueryBuilder = QueryBuilders
.geoDistanceQuery(nameGeoPointField)
.point(lat,lon)
.distance(distance,DistanceUnit.KILOMETERS);
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);
}
强文本
本文链接:https://www.f2er.com/3150554.html