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

时间:2017-06-02 15:13:45

标签: elasticsearch geolocation distance

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

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 个答案:

答案 0 :(得分:5)

方法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)"
            }
        }
    }
}