elasticsearch默認是根據相關度算分(_score)來排序,但是也支持自定義方式對搜索
1.普通字段排序
keyword、數值、日期類型排序的語法基本一致。
語法:
GET /indexName/_search { "query": { "match_all": {} }, "sort": [ { "FIELD": "desc" // 排序字段、排序方式ASC、DESC } ] }
示例:
需求描述:酒店數據按照用戶評價(score)降序排序,評價相同的按照價格(price)升序排序
2.地理坐標排序
地理坐標排序略有不同。
語法說明:
GET /indexName/_search { "query": { "match_all": {} }, "sort": [ { "_geo_distance" : { "FIELD" : "緯度,經度", // 文檔中geo_point類型的字段名、目標坐標點 "order" : "asc", // 排序方式 "unit" : "km" // 排序的距離單位 } } ] }
這個查詢的含義是:
-
指定一個坐標,作為目標點
-
計算每一個文檔中,指定字段(必須是geo_point類型)的坐標 到目標點的距離是多少
-
根據距離排序
示例:
需求描述:實現對酒店數據按照到你的位置坐標的距離升序排序
提示:獲取你的位置的經緯度的方式:https://lbs.amap.com/demo/jsapi-v2/example/map/click-to-get-lnglat/
假設我的位置是:31.034661,121.612282,尋找我周圍距離最近的酒店。