弹性搜索查询地理距离

时间:2018-06-26 09:31:25

标签: elasticsearch kibana

我想按客户点获得交货半径内的资源。 我的映射如下:

 "restaurantPoint"       => [
 "type" => "geo_point"
 ],
 "deliveryRadius"        => [
 "type" => "float"
 ]

和以下示例数据:

`"restaurantPoint": "35.73701996471125,51.409086138010025",
"deliveryRadius": 1`

因此,每个餐厅都有一个点和一个以km为单位的交货半径,另一方面,我们知道用户点。 在查询中,我想获得可以将食物运送到用户位置的餐厅。 我必须检查餐厅点和用户点之间的距离是否小于餐厅传送半径。

例如,如果用户与餐厅之间的距离为1公里,而餐厅配送半径为2公里,我们可以选择该范围。

elastic search文档不完整,无法找到解决方案。

1 个答案:

答案 0 :(得分:0)

最后我使用了脚本:

GET development-restaurants/restaurants/_search
{
    "query": {
        "bool" : {
        "must" : {
            "script" : {
                "script" : {
                    "source": "doc['restaurantPoint'].arcDistance(35.73702, 51.40909) <= doc['deliveryRadius'].value",
                    "lang": "painless"
                 }
            }
        }
     }
  }
}