弹性搜索查询最大值aggs

时间:2017-07-19 06:07:13

标签: search elasticsearch grouping aggregation

我有这样的数据:

Name     Fees Collected     Date
Name1     100              2017-05-01T12:00:00
Name1     200              2017-05-02T12:00:00
Name2     500              2017-05-05T12:00:00
Name2     600              2017-05-06T12:00:00
Name3     1000             2017-05-010T12:00:00
Name3     1100             2017-05-011T12:00:00
Name4     1500             2017-05-011T12:00:00

如何编写查询以将过滤/分组的聚合返回到最大日期,每个组的最小文档数为2?

我期待以下输出:

Name     Fees Collected   Date  
Name1     200             2017-05-02T12:00:00
Name2     600             2017-05-06T12:00:00
Name3     1100            2017-05-011T12:00:00

最后,我会得到如下聚合

"aggregations" {
    "Fees Collected " : "1900" //(200+600+1100)
    }

有没有在弹性搜索中实现这一点? 谢谢..

1 个答案:

答案 0 :(得分:1)

有办法!

首先,您需要在“名称”字段中添加术语聚合,并添加“min_doc_count”:3。 然后在字段“Date”上的子max_aggregation。

这样的事情:

"aggs": {
 "split_by_name": {
  "terms": {
    "field": "Name",
    "min_doc_count": 3
  },
  "aggs": {
    "max_date": {
      "max": {
        "field": "Date"
        }
      }
    }
  }
}