弹性搜索5.x中地理距离查询中的返回距离

Posted

技术标签:

【中文标题】弹性搜索5.x中地理距离查询中的返回距离【英文标题】:Return distance in geo distance query in elastic search 5.x 【发布时间】:2017-06-02 15:13:44 【问题描述】:

我需要使用地理距离查询从弹性搜索中的搜索坐标获取距离。我试过这个

curl -XGET 'http://127.0.0.1:9200/branch-master/master/_search?pretty=1'  -d '

   "script_fields" : 
      "distance" : 
         "params" : 
            "lat" : 18.00,
            "lon" : 72.00
         ,
         "script" : "doc[\u0027location\u0027].distanceInKm(lat,lon)"
      
   

'

这是来自Return distance in elasticsearch results?

但这给了我错误“[params] 中的 start_object 的未知键”。我无法理解这是什么。上述解决方案似乎适用于相当旧版本的 ES。我正在使用 ES 5.1。在手册中,我找不到地理距离查询的相关解决方案。有人可以帮我吗?

【问题讨论】:

【参考方案1】:

distanceInKm 方法已弃用,现在已删除 (5.x)。例如,请改用 arcDistance。更多信息在这里:https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_50_scripting.html#_geopoint_scripts

语法略有改变。这在 Elasticsearch 5.6 中适用于我。


    "script_fields": 
        "geo_distance": 
            "script": 
                "params": 
                    "lat": 18.00,
                    "lon": 72.00
                ,
                "inline": "doc['location'].arcDistance(params.lat, params.lon)"
            
        
    

【讨论】:

这是从 doc['location'] 点的参数中计算到 (lat, lon) 的距离吗?如果我有两个带有 (lat, lon) 对的参数,我将如何计算它们的距离?

以上是关于弹性搜索5.x中地理距离查询中的返回距离的主要内容,如果未能解决你的问题,请参考以下文章

优化表格以搜索地理位置

返回地理点数组的 Elasticsearch 距离

如何进行地理距离查询仅返回我尚未“喜欢”的结果、Elastic Search、Dynamo DB

使用地理距离扩展 SQL 查询

查询以将在特定地理距离内的行返回到给定行(使用 sql server 2008)

Spring-data MongoDB地理查询