我正在尝试使用弹性搜索的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
}
}
}
答案 0 :(得分:-1)
错误地传递了top_left
和bottom_right
值。尝试如下设置值:
location :{
"top_right":{
"lat":53.2323104,
"lon":4.311799
},
"bottom_left":{
"lat":52.3136724,
"lon":6.704821
}
}