ElasticSearch想關性排序
在默認的情況下,結果集會按照相關性進行排序,也就是相關性越高,排名越靠前。
本次我們說到的是字段值排序
一級排序
在常見的例子當中,我們會按照時間進行排序,從而將最新的文檔排列靠前。我們使用sort參數進行排序
看下面例子
GET /_search
{
"query" : {
"filtered" : {
"filter" : { "term" : { "user_id" : 1 }}
}
},
"sort": { "date": { "order": "desc" }}
}
得到的結果
"hits" : {
"total" : 6,
"max_score" : null, <1>
"hits" : [ {
"_index" : "us",
"_type" : "tweet",
"_id" : "14",
"_score" : null, <1>
"_source" : {
"date": "2014-09-24",
...
},
"sort" : [ 1411516800000 ] <2>
},
...
}
<1> _score 字段沒有經過計算,因爲它沒有用作排序。+
<2> date 字段被轉爲毫秒當作排序依據。
首先,在每個結果中增加了一個 sort 字段,它所包含的值是用來排序的。 在這個例子當中 date 字段在內部被轉爲毫秒,即長整型數字1411516800000等同於日期字符串 2014-09-24 00:00:00 UTC。
其次就是 _score 和 max_score 字段都爲 null。計算 _score 是比較消耗性能的, 而且通常主要用作排序 – 我們不是用相關性進行排序的時候,就不需要統計其相關性。 如果你想強制計算其相關性,可以設置track_scores爲 true。
多級排序
GET /_search
{
"query" : {
"filtered" : {
"query": { "match": { "tweet": "manage text search" }},
"filter" : { "term" : { "user_id" : 2 }}
}
},
"sort": [
{ "date": { "order": "desc" }},
{ "_score": { "order": "desc" }}
]
}
多級排序,也就是結果集有限使用第一排序字段來排序,當第一排序值相同的時候,再也是第二排序字段對第一排序字段進行排序。