聚合

作者: 宙斯是只猫 | 来源:发表于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