根据地理信息搜索文档之后,返回多个文档数据的时候,很多业务场景都希望根据距离由近到远排序。
下面是按距离排序的例子
GET /shops/_search
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_distance": { // 按距离搜索
"distance": "1km", // 搜索1千米范围
"location": { // 搜索字段为location
"lat": 39.889916, // 当前纬度
"lon": 116.379547 // 当前经度
}
}
}
}
},
"sort": [ // 设置排序条件
{
"_geo_distance": { // _geo_distance代表根据距离排序
"location": { // 根据location存储的经纬度计算距离。
"lat": 39.889916, // 当前纬度
"lon": 116.379547 // 当前经度
},
"order": "asc" // asc 表示升序,desc 表示降序
}
}
]
}
说明:
按距离排序条件,需要再次设置当前经纬度坐标,这样ES才知道计算距离的参考坐标。