elasticsearch系列之排序

来源:互联网 发布:免费网络英语课堂 编辑:程序博客网 时间:2024/05/17 04:11

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

多级排序,也就是结果集有限使用第一排序字段来排序,当第一排序值相同的时候,再也是第二排序字段对第一排序字段进行排序。

0 0
原创粉丝点击