如何在弹性搜索中使用纬度经度搜索位置附近的区域

Posted

技术标签:

【中文标题】如何在弹性搜索中使用纬度经度搜索位置附近的区域【英文标题】:How to search area nearby a location using latitude longitude in elastic search 【发布时间】:2019-10-24 06:06:12 【问题描述】:

我想通过我的弹性搜索搜索所有附近的位置,给定一对纬度和经度,它有两个单独的纬度和经度列。 如何做到这一点

【问题讨论】:

【参考方案1】:

您必须使用 geoDistanceQuery。请在下面找到代码的 sn-p(用 Java 编写,使用 Elasticsearch REST 高级客户端。

仅供参考:我的网站上有完整的教程: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);

【讨论】:

链接死了。 ictcalimero.wordpress.com/2018/04/06/…ictcalimero.wordpress.com/2018/04/22/…

以上是关于如何在弹性搜索中使用纬度经度搜索位置附近的区域的主要内容,如果未能解决你的问题,请参考以下文章

在给定特定纬度/经度的情况下,如何计算与纽约附近地铁入口的距离?

使用经度和纬度查找给定距离内的所有附近客户

使用经纬度IOS搜索附近的人

如何从纬度/经度获取附近的位置?

使用弹性搜索地理功能查找最常见的位置?

K-means 如何确定特定纬度和经度附近的大多数位置 [关闭]