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

标签 spring-boot elasticsearch geolocation latitude-longitude

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

相关文章:

java - CompletableFuture.runAsync() 调用 void 方法的 Mockito 测试用例

java - 无法在命令提示符下将Spring Boot应用程序作为可运行的jar运行

Java hibernate : Access foregin key

java - Spring 启动: Getting @Scheduled cron value from database

elasticsearch - 以较高的文档频率获取术语

ios - 如何防止iOS应用程序被挂起

javascript - 由于 'Only secure origins are allowed',无法使用 navigator.geolocation

html - 如何在没有HTML的情况下在Elasticsearch中存储文档?

elasticsearch - Elasticsearch支持区分大小写和不区分大小写

java - 除非 GPS 开启,否则融合位置提供程序无法获取位置