elasticsearch composite聚合

朱雀 2023-06-12 11:15 19阅读 0赞

composite聚合类似于mysql的多字段group by,比如要按月以及所属门店两个维护来统计每个月的收益,如果用mysql来实现的话类似

select count(commissionamount) from xxx_table

group by timeperiod,orgId

等价的elasticsearch可以用嵌套聚合来实现:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pvaG4xMzM3_size_16_color_FFFFFF_t_70

  1. {
  2. "size": 0,
  3. "aggs" : {
  4. "my_buckets": {
  5. "composite" : {
  6. "size": 5,
  7. "sources" : [
  8. { "date":
  9. { "date_histogram": { "field": "timeperiod", "interval": "1M", "order": "asc","format":"yyyy-MM" } }
  10. },
  11. { "orgId": { "terms" : { "field": "orgid.keyword","order":"desc" } } }
  12. ]
  13. },
  14. "aggs": {
  15. "sales": {
  16. "sum": {
  17. "field": "commissionamount"
  18. }
  19. }
  20. }
  21. }
  22. }
  23. }

上面的查询脚本的意思就是以timeperiod以及orgid.keyword两个字段作为复合聚合条件,也就是按照收益月份以及所属门店对数据进行分割,如果没有子查询的话那么仅仅返回文档数量,加上子查询后就会根据组合聚合的结果形成的桶(即Bucket),然后在每个桶内做进一步的数据聚合,即收益统计。

含有子查询结果如下图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pvaG4xMzM3_size_16_color_FFFFFF_t_70 1

不含子聚合的查询结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pvaG4xMzM3_size_16_color_FFFFFF_t_70 2

发表评论

表情:
评论列表 (有 0 条评论,19人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Elasticsearch聚合

    一、聚合分析简介 1. ES聚合分析是什么? 聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中(**解释:结果集类似于“关系型数据库”里的表**)数据...