聚合

作者: 宙斯是只猫 | 来源:发表于2019-07-10 22:12 被阅读0次

es的聚合总共分为四种aggregations
1.bucketing(桶聚合,group by的操作)
2.meric(指标聚合,min,max,count,avg,sum等操作)
3.matrix,可以对文档进行一些统计,但是不支持脚本,上面两个都是支持脚本的
4.pipeline,可以对聚合结果进行二次聚合

聚合分析算是es提供的功能的第二大功能,第一大是搜索,如果在数据量不是很大,对聚合的实时性和要求不高的情况下,可以替流处理和批处理,当然etl数据清洗的步骤还是要的,在实时性上,以定时任务去分析es中的数据对于快速搭建监控平台是很好的一个手段,但是当数据量过大,而要求很高的实时性和准确性时,es略显有点疲软,还是得依赖于批处理和流处理这种大数据计算框架.
1.bucketing

2.meric 指标聚合

以kibana提供的样本数据kibana_sample_data_flights为例,查询所有机票的平均价格,总和,最大,最小,stats一个指标可以聚合上述的几个结果,missing 代表如果这个doc没有这个字段该如何处理

GET kibana_sample_data_flights/_search
{
  "size": 0,
  "aggs": {
    "avg_price": {
      "avg": {
        "field": "AvgTicketPrice",
        "missing":10
      }
    },
    "sum_price": {
      "sum": {
        "field": "AvgTicketPrice"
      }
    },
    "min_price": {
      "min": {
        "field": "AvgTicketPrice"
      }
    },
      "max_price": {
        "max": {
          "field": "AvgTicketPrice"
        }
      },
      "total_stats":{
        "stats": {
          "field": "AvgTicketPrice"
        }
      }
  }
}

利用脚本,脚本的威力就在于可以自定义一些条件,然后修改一些值,比如给AvgTicketPrice先调高个10块钱,再去聚合结果

{
  "size": 0, 
    "aggs" : {
        "avg_corrected_grade" : {
            "avg" : {
                "field" : "AvgTicketPrice",
                "script" : {
                    "lang": "painless",
                    "source": "_value + params.sub",
                    "params" : {
                        "sub" : 10
                    }
                }
            }
        }
    }
}


相关文章

网友评论

      本文标题:聚合

      本文链接:https://www.haomeiwen.com/subject/eynkkctx.html