elasticsearch系列之排序

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" }}
    ]
}

多級排序,也就是結果集有限使用第一排序字段來排序,當第一排序值相同的時候,再也是第二排序字段對第一排序字段進行排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章