16-搜索结果处理-排序
搜索的结果可以按照用户指定的方式去处理或展示。
排序
elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。
普通字段排序
keyword、数值、日期类型排序的语法基本一致。
语法:
排序条件是一个数组,也就是可以写多个排序条件。按照声明的顺序,当第一个条件相等时,再按照第二个条件排序,以此类推。
示例:
需求描述:酒店数据按照用户评价(score)降序排序,评价相同的按照价格(price)升序排序
1 #排序 2 3 #普通字段排序 4 GET /hotel/_search 5 { 6 "query": { 7 "match_all": {} 8 }, 9 "sort": [ 10 { 11 "score": "desc", 12 "price": "asc" 13 } 14 ] 15 }
地理坐标排序
地理坐标排序略有不同。
语法说明:
这个查询的含义是:
-
指定一个坐标,作为目标点
-
计算每一个文档中,指定字段(必须是geo_point类型)的坐标 到目标点的距离是多少
-
根据距离排序
示例:
需求描述:实现对酒店数据按照到你的位置坐标的距离升序排序
提示:获取你的位置的经纬度的方式:https://lbs.amap.com/demo/jsapi-v2/example/map/click-to-get-lnglat/
假设我的位置是:113.319776,23.143489,寻找我周围距离最近的酒店。
1 #地理坐标排序 2 GET /hotel/_search 3 { 4 "query":{ 5 "match_all": {} 6 }, 7 "sort": [ 8 { 9 "_geo_distance": { 10 "location": { 11 "lat": 31.034661, 12 "lon": 121.612282 13 }, 14 "order": "asc", 15 "unit": "km" 16 } 17 } 18 ] 19 }
希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt