ES拥有强大的聚合统计能力故而应用广泛,简单结构的聚合统计功能不多,如何针对复杂结构进行聚合统计实际上是很多生产上需要面对的问题,而ES相关文档毕竟很少,大多数人又不太愿意去读官方文档。这里写一下如何对复杂结构进行聚合,产生我们想要的统计数据。
本次用到工具Kibana,操作均在Kibana上进行。例我们现在有一个doc,里面有很多很多的字段,其中一个字段为wordFrequency,其样式大致如下:
"wordFrequency" : [
{
"keyword" : "01",
"count" : 1
},
{
"keyword" : "宽带",
"count" : 1
}
]
里面分别记录了词,词的数量,现在我们有大量的doc,里面有很多的词。我们要做的就是以词为维度,统计其词量。类似于sql里的group by之后在count指定字段的功能。
其统计实现如下:
GET audio/info/_search
{
"size": 0,
"query":{
"bool": {
"must": [
{
"range": {
"info.inputTime": {
"gte": "2019-07-01 05:51:47",
"lte": "2019-07-09 09:59:59"
}
}
}
]
}
},
"aggs": {
"wordgroup": {
"nested": {
"path": "wordFrequency"
},
"aggs": {