Elasticsearch使用要点(五)-排序

排序

默认排序:

  • 当查询计算了相关度时, 返回的结果默认按照相关度降序排序.
  • 当没有计算相关度时(filter查询等), 或计算从出的相关度相同时(constant_score查询等), 顺序是随机的.

指定值字段排序:

  • 使用sort参数, 来指定排序:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    GET /_search
    {
    "query" : {
    "bool" : {
    "filter" : { "term" : { "user_id" : 1 }}
    }
    },
    "sort": { "date": { "order": "desc" }} //排序升降
    }

    返回的结果中将包含sort字段, 代表着用于排序的值.

    date类型被用作排序字段时, es内部会将其转化为unix timestamp再进行排序.

    如不指定order, 默认的排序将是升序.

多级排序:

  • 多级排序类似于MySQL的排序, 只有第一个排序字段相同时, 才使用第二个字段来排序.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    GET /_search
    {
    "query" : {
    "bool" : {
    "must": { "match": { "tweet": "manage text search" }},
    "filter" : { "term" : { "user_id" : 2 }}
    }
    },
    "sort": [
    { "date": { "order": "desc" }},
    { "_score": { "order": "desc" }}// 排序可以使用score
    ]
    }

多值字段排序:

  • 多值字段可以是一个无序可重复集合. 排序时可以使用mode参数, 将集合转为单元素.

    1
    2
    3
    4
    5
    6
    "sort": {
    "dates": {
    "order": "asc",
    "mode": "min"
    }
    }
  • mode可以接受的参数有: min, max, avg, sum.