Solr查詢參數sort(排序)


摘要: Solr查詢每一次返回的數據都有一定的順序,特定順序的結果對於業務來說可能非常重要。

不指定排序

一般我們不指定排序規則,這樣的結果能滿足大部分需求,默認是用文檔的得分作為排序標准。相當於加上了參數sort=score desc,這里的score是solr的一個隱藏字段,衡量這個文檔對於該查詢參數的權重。使用如下的HTTP查詢請求:
http://localhost:8080/solr/core/select?q=*:*&fl=*,score
返回數據:

{
  "responseHeader":{ "status":0, "QTime":0, "params":{ "q":"*:*", "fl":"*,score", "wt":"json"}}, "response":{"numFound":106,"start":0,"maxScore":1.0,"docs":[ { "id":"c3812fee-de7a-48e5-a60d-79a882aca823", "title_s":"皇帝諷刺劇", "artist_s":"鮑勃·迪倫", "country_s":"美國", "company_s":"哥倫比亞", "price_d":10.9, "year_s":"1985", "type_s":"光盤", "description_s":"夏天的午后聽Bob Dylan的歌特別容易被催眠", "_version_":1551502047719718912, "score":1.0 }, ... ] } }

有一個socre的filed,所有score值為1,是因為我返回了所有數據,它們的權重都相同。

按某一filed排序

有時候,我們只關心某一字段,希望返回的數據根據這一字段排序。例如,我想查找所有書籍中比較便宜的書籍。可以使用查詢參數sort=price_s asc,使用如下的HTTP查詢請求:
http://localhost:8080/solr/core/select?q=*:*&sort=price_d asc

返回數據:

{
  "responseHeader":{ "status":0, "QTime":0, "params":{ "q":"*:*", "sort":"price_d asc", "wt":"json"}}, "response":{"numFound":106,"start":0,"docs":[ { "id":"1900599155", "title_s":"渡邊淳一作品精選集", "author_s":"渡邊淳一", "category_s":"外國小說", "page_i":10000, "price_d":12.90, "odertime_dt":"2015-10-02T21:47:04Z", "publisher_s":"不知名出版社", "type_s":"圖書", "description_s":"擁有眾多的讀者,我倍感喜悅。", "_version_":1552794664615018496 }, ... ] } }

按多個filed排序

有時候,我希望返回的數據先按權重排序,再按某一filed排序,那么可以使用多個field來排序,此時按第一個排序參數排序,如果第一個參數不能區分順序,則按第二個參數排序。對於某次查詢,我希望先按權重排序,權重相同則按價格排序,那么,查詢參數可以為sort=score desc, price asc

含有函數的排序

有時候,排序規則可能需要兩個filed的值做數學運算。比如,有一次排序基於兩個字段的和,可以使用這樣的查詢參數sort=sum(x_d, y_d) desc(這里的x字段和y字段都為double類型)。


免責聲明!

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



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