elasticsearch geo bounding box不返回结果

时间:2016-12-01 19:37:45

标签: php elasticsearch geolocation elasticsearch-5

我正在尝试使用弹性搜索的Geo Bounding Box功能将结果返回到我选择的框中。我从Google地图获取边界坐标,它是NorthEast和SouthWest格式。

这是传递给elasticsearch php客户端的参数的示例转储(为了便于阅读,转换为JSON):

{
   "index":"MyIndex",
   "body":{
      "query":{
         "bool":{
            "must":{
               "match_all":{

               }
            },
            "filter":{
               "geo_bounding_box":{
                  "location":{
                     "top_right":{
                        "lat":53.2323104,
                        "lon":6.704821
                     },
                     "bottom_left":{
                        "lat":52.3136724,
                        "lon":4.311799
                     }
                  }
               }
            }
         }
      }
   }
}

这里有一些ES中的示例结果,当我进行普通的简单搜索(没有地理/边界框)时,我会返回:

[
   {
      "object_id":14396,
      "object_type":"POI",
      "location":{
         "lat":53.05194,
         "lon":5.38417
      }
   },
   {
      "object_id":24046,
      "object_type":"POI",
      "location":{
         "lat":52.52711,
         "lon":5.06319
      }
   },
   {
      "object_id":24680,
      "object_type":"POI",
      "location":{
         "lat":52.72525,
         "lon":4.96201
      }
   }
]

我相信这些都应该通过边界框搜索返回,我在这里缺少什么?

编辑:包含在下面的映射

{
   "MyIndex":{
      "mappings":{
         "pois":{
            "properties":{
               "object_id":{
                  "type":"string"
               },
               "object_type":{
                  "type":"string"
               },
               "location":{
                  "type":"geo_point"
               },
            }
         },
      }
   }
}

编辑2:ES中数据的原始响应:

{
   "_index":"MyIndex",
   "_type":"pois",
   "_id":"14916",
   "_score":1,
   "_source":{
      "object_id":"14916",
      "object_type":"POI",
      "location":{
         "lat":53.13915,
         "lon":6.19422
      }
   }
}

1 个答案:

答案 0 :(得分:-1)

错误地传递了top_leftbottom_right值。尝试如下设置值:

location :{
    "top_right":{
        "lat":53.2323104,
        "lon":4.311799
        },
    "bottom_left":{
        "lat":52.3136724,
        "lon":6.704821
        }
}