你如何在弹性搜索中进行另一种按​​时间顺序排序?

时间:2018-02-22 20:46:05

标签: elasticsearch

我在elasticsearch中有以下文件。 value是一个整数,date是一个日期时间对象:

{
    "_id": 1,
    "source": {
        "date": "2018-05-01 18:00:00"
        "value": 10,
    }
},
{
    "_id": 2,
    "source": {
        "date": "2018-07-03 13:00:00"
        "value": 500,
    }
},
{
    "_id": 3,
    "source": {
        "date": "2018-10-05 20:00:00"
        "value": 80,
    }
},

如果我想获得按日期排序的最高值的前2名,预期输出为:

{
    "_id": 2,
    "source": {
        "date": "2018-07-03 13:00:00"
        "value": 500,
    }
},
{
    "_id": 3,
    "source": {
        "date": "2018-10-05 20:00:00"
        "value": 80,
    }
},

我已经能够自己排序任何一个,但他们不能一起工作。这是我的排序查询:

"sort": [
    {"value": {"order": "desc"}},
    {"date": {"order": "asc"}}
]

上述查询将按值按降序对文档进行排序,但会忽略按时间顺序排序。甚至可以在elasticsearch 2.x中进行那种双重排序吗?

1 个答案:

答案 0 :(得分:0)

2.x中可以进行多级排序,您正在正确地进行。我猜你可能期待不同的行为?

official guide中,有一个关于它是如何工作的很好的解释:

  

订单很重要。结果首先按照第一个标准排序。   只有第一个排序值相同的结果才会被排序   按第二个标准,等等。