ES中通过geo_bounding_box搜索,在地图画一个矩形,搜索矩形范围内的坐标点。
例如:
在地图画一个矩形,把矩形范围内的店铺找出来。
GET /shops/_search
{
"query": {
"bool": { // 布尔组合查询
"must": {
"match_all": {} // 这里设置其他搜索条件,直接搜索所有文档
},
"filter": { // 地理信息搜索不打算参与相关度评分,所以使用filter包裹起来。
"geo_bounding_box": { // geo_bounding_box实现按矩形范围搜索
"location": { // 店铺的坐标点保存在location字段中
"top_left": { // 设置矩形的左上角坐标
"lat": 40.73, // 纬度
"lon": -74.1 // 经度
},
"bottom_right": { // 设置矩形的右下角坐标
"lat": 40.717,
"lon": -73.99
}
}
}
}
}
},
"sort": [ // 设置排序条件
{
"_geo_distance": { // _geo_distance代表按距离排序
"location": { // 计算 location保存的坐标和当前坐标的距离
"lat": 40, // 当前纬度
"lon": -70 // 当前经度
},
"order": "asc" // 根据距离升序排序
}
}
]
}
说明:
按矩形范围搜索店铺,如果需要对搜索的结果按距离排序,需要指定一个当前参考坐标,否则ES无法计算距离,也就是无法按距离排序。