2017-08-15 63 views
0

假設我在ES中有這些數據。按用戶定義的組elasticsearch聚合

| KEY  | value  | 
|:-----------|------------:| 
| A   |   1| 
| A   |   2| 
| B   |   2| 
| C   |   3| 
| D   |   4| 
| E   |   5| 
| E   |   5| 
| F   |   6| 

我用這個

{ 
    "from": 0, 
    "size": 0, 
    "query": { 
    "filtered" : { 
     "query" : { 
      "match_all" : {} 
     }, 
     "filter" : { 
     "bool" : { 
      "must" : [ 
      {"terms": {"key": ["A", "B", "C", "D", "E", "F"]}} 
      ] 
     } 
     } 
    } 
    }, 
    "aggs" : { 
    "sum_value" : { 
     "terms" : { "field" : "key" }, 
     "aggs" : { 
     "sum_value" : { "sum" : { "field" : "value" } } 
     } 
    } 
    } 
} 

得到同樣關鍵的總和,結果是這樣的:

"sum_uv": { 
    "doc_count_error_upper_bound": 0, 
    "sum_other_doc_count": 0, 
    "buckets": [ 
    { 
     "key": "A", 
     "doc_count": 2, 
     "sum_value": { 
     "value": 3 
     } 
    } 
    .... 
    ] 
} 

但現在,我要總結的所有元素例如,在同一組中,我有一個映射數據,它告訴我組信息:

group1 = [A, B, C] 
group2 = [D, E, F] 
..... 

我想我需要一個嵌套聚合的目的,但我不知道這樣做。

結果是這樣的:

sum_group1 = 8 
sum_group2 = 20 
...... 

提前感謝!

回答

1

有這樣做的至少有兩種方式:

  1. 如果羣體是固定的,你可以組名添加到每個文檔,然後第一彙總計算組,然後在值。
  2. 如果您想要更動態的方法,可以使用filter + regexp對結果進行分組。看到這裏例如:使用https://www.elastic.co/blog/quick-tips-regex-filter-buckets

兩個例子過濾器:

{ 
    "size": 0, 
    "aggs": { 
    "groups": { 
     "filters": { 
     "filters": { 
      "group1": { "terms": { "key": [ "A","B","C" ] } }, 
      "group2": { "terms": { "key": [ "D","E","F" ] } } 
     } 
     }, 
     "aggs": { 
     "groupsum": { 
      "sum": { 
      "field": "key" 
      } 
     } 
     } 
    } 
    } 
} 

2個

{ 
    "size": 0, 
    "query": { 
    "match_all": { } 
    }, 
    "aggs": { 
    "group1": { 
     "filter": { 
     "terms": { 
      "key": [ "A", "B", "C" ] 
     } 
     }, 
     "aggs": { 
     "group1sum": { 
      "sum": { 
      "field": "value" 
      } 
     } 
     } 
    }, 
    "group2": { 
     "filter": { 
     "terms": { 
      "key": [ "D", "E", "F" ] 
     } 
     }, 
     "aggs": { 
     "group2sum": { 
      "sum": { 
      "field": "value" 
      } 
     } 
     } 
    } 
    } 
} 
+0

謝謝,但是現在的情況是,我不能給文檔添加任何東西並且組關係數據從另一個數據庫中獲取。這個小組沒有任何模式。 –

+0

@JasonYoung添加使用過濾器聚合的示例。這是你所要求的那種行爲嗎? – Peter

+0

不錯!那就對了。 2是我想要的! –