【问题标题】:Including distance in geo search result在地理搜索结果中包含距离
【发布时间】:2022-01-24 16:26:09
【问题描述】:

我已经实现了 Elastic Search - Java API 来根据距离搜索数据。

QueryBuilder geoQuery =  QueryBuilders.geoDistanceQuery("article_location.location").point(lat , lon).distance(5 , DistanceUnit.KILOMETERS);
QueryBuilders.boolQuery().filter(geoQuery);

但是,我想从输入纬度/经度获取每个结果的距离。有什么办法可以指定吗?

我看到在弹性 DSL 中我们可以通过 script_fields 来实现,但不知道如何通过 Java API 获取它。

"script_fields": {
    "distance": {
      "script": "doc['latlong'].distanceInKm(lat, lon)"
    }

我正在使用

elasticsearch-rest-high-level-client 7.9.2 版本。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    Java 客户端还允许您将脚本字段添加到查询中,就像这样:

    sourceBuilder.query(...);
    
    // add lat/lon as parameters
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("lat", lat);
    params.put("lon", lon);
    
    // create the script
    Script script = new Script(ScriptType.INLINE, "painless", "doc['latlong'].distanceInKm(params.lat, params.lon)", params);
    
    // add the script field to the source query builder
    sourceBuilder.scriptField("distance", script);
    

    【讨论】:

    • 成功了!!只是我不得不使用 arcDistance 而不是 distanceInKm(它似乎已被弃用)。此外,包括 searchSourceBuilder.fetchSource(true);保留原始属性。
    • 太棒了,很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 2014-02-02
    • 2011-08-26
    • 2012-07-18
    • 2013-11-26
    • 2012-08-03
    • 1970-01-01
    • 2012-03-06
    • 2012-03-06
    相关资源
    最近更新 更多