gpt4 book ai didi

spring-boot - 如何在 Elasticsearch 中使用经度搜索位置附近的区域

转载 作者:行者123 更新时间:2023-12-03 02:37:46 25 4
gpt4 key购买 nike

我想通过 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com