Solr查詢引數sort(排序)
阿新 • • 發佈:2019-02-14
摘要: 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://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型別)。