如何检索具有给定字段值的最新事件?

时间:2015-10-27 10:12:32

标签: elasticsearch

我将类似于以下事件的事件编入索引:

{
  "time": "2015-10-01",
  "kind": "A"
},
{
  "time": "2015-10-02",
  "kind": "B"
},
{
  "time": "2015-10-15",
  "kind": "A"
},
{
  "time": "2015-10-16",
  "kind": "B"
}

换句话说,这些是几种定时事件(上例中的AB)。保证相同kind的同一time不能有两个或多个事件。

我正在寻找一个查询,可以检索每种类型的最新(time最接近"现在")事件。对于上面的示例,这些将​​是拉特两个。

到目前为止,我强迫_id拥有kind的值,这会自动保留一组唯一的事件(事件会按时间编制索引,因此具有日期的事件保证2015-10-16在早期2015-10-02之后的索引之后编入索引。这当然不能保留事件的历史,这是我现在感兴趣的事情。

1 个答案:

答案 0 :(得分:1)

这个查询怎么样:

{
  "size": 0,
  "aggs": {
    "unique_kind": {
      "terms": {
        "field": "kind",
        "size": 10
      },
      "aggs": {
        "max_date": {
          "max": {
            "field": "time"
          }
        },
        "1st": {
          "top_hits": {
            "size": 1,
            "sort": [{"time":"desc"}]
          }
        }
      }
    }
  }
}