使用Elasticsearch进行多级聚合

时间:2019-07-17 20:39:47

标签: elasticsearch elasticsearch-aggregation

我在Elasticsearch中有以下格式的多条记录:

{ 
  "_id": "<id created by elasticsearch>"
  "trend_id": "5573d345b60c4be1a6337d18ad097d6c",  
  "item_state": 1    
}

对于相同的"item_state",可能有多个"trend_id"的值。 我想获得最多"trend_id"个不同的"item_state"的数量。因此,如果"item_state"的可能值为1,2,3,那么我想要:

1:Count(Distinct(trend_id)),其中1是最大item_state(按Trend_id分组)

2:Count(Distinct(trend_id)),其中2是最大item_state(按Trend_id分组)

3:Count(Distinct(trend_id)),其中3是最大item_state(按Trend_id分组)

我该如何实现?

我在下面的查询中尝试过,它按"trend_id"分组,并为"item_state"找到最大的"trend_id"

POST index-*/_search
{
  "size": 0,
  "aggs": {
    "my_group_by_trend_id": {
      "terms": {"field": "trend_id"},
      "aggs": {
        "my_max_states": {
          "max": {"field": "item_state"}
        }
      }
    }
  }
}

但是我想进一步汇总这些结果,并找出1是最大次数,2是最大次数和3是最大次数的次数。

示例:

  

{“ trend_id”:“ A”,“ item_state”:1}

     

{“ trend_id”:“ A”,“ item_state”:2}

     

{“ trend_id”:“ A”,“ item_state”:3}

     

{“ trend_id”:“ B”,“ item_state”:1}

     

{“ trend_id”:“ B”,“ item_state”:1}

     

{“ trend_id”:“ C”,“ item_state”:3}

预期:

  

{1:1,2:0,3:2}

所以基本上,我想对先前聚合产生的结果进行聚合。

0 个答案:

没有答案