DSL查詢ES結果排序


elasticsearch默認是根據相關度算分(_score)來排序,但是也支持自定義方式對搜索結果排序。可以排序字段類型有:keyword類型、數值類型、地理坐標類型、日期類型等。

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,尋找我周圍距離最近的酒店。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM