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 }
View Code

地理坐标排序

地理坐标排序略有不同。

 语法说明

这个查询的含义是:

  • 指定一个坐标,作为目标点

  • 计算每一个文档中,指定字段(必须是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 }
View Code

 

 

posted @ 2023-05-22 15:28  JustJavaIt  阅读(50)  评论(0编辑  收藏  举报