search - Elasticsearch 查询最大值聚合

标签 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)
    }

有没有办法在 Elasticsearch 中实现这一点? 谢谢..

最佳答案

有办法!

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

像这样的东西:

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

关于search - Elasticsearch 查询最大值聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45182167/

相关文章:

MYSQL 分组和计数

java - 使用 Apache Tika 在 solr 中提取 PDF 文件的内容

c - 设计一个字符搜索函数,同时被迫使用 strchr

elasticsearch - 是否可以通过字段是否满足条件对elasticsearch查询进行排序?

python - NumPy:通过将一列中的值按另一列值分组来创建 dict()

java - 如何使用 java 流对 JPA 存储库中的字段进行分组和平均并放入新集合中

java - 向玩家发送消息时出现问题

search - Google Site Search - 如何摆脱品牌?

amazon-web-services - 从 AWS Beanstalk 访问 AWS Elasticsearch

elasticsearch - 在条款汇总中附加其他汇总