美文网首页
golang elasticsearch指标聚合(metrics

golang elasticsearch指标聚合(metrics

作者: 一位先生_ | 来源:发表于2022-05-17 01:33 被阅读0次

    ES指标聚合,就是类似SQL的统计函数,指标聚合可以单独使用,也可以跟桶聚合一起使用,下面介绍golang如何使用ES的指标聚合。

    不了解ES指标聚合相关知识,先看一下Elasticsearch 指标聚合教程

    1. Value Count

    值聚合,主要用于统计文档总数,类似SQL的count函数。

    package main
    
    import (
        "context"
        "fmt"
        "github.com/olivere/elastic/v7"
        "time"
    )
    
    func main() {
        // 创建ES client
        client, err := elastic.NewClient()
        if err != nil {
            // Handle error
            panic(err)
        }
    
        // 执行ES请求需要提供一个上下文对象
        ctx := context.Background()
    
        // 创建Value Count指标聚合
        aggs := elastic.NewValueCountAggregation().
            Field("order_id") // 设置统计字段
    
        searchResult, err := client.Search().
            Index("kibana_sample_data_flights"). // 设置索引名
            Query(elastic.NewMatchAllQuery()). // 设置查询条件
            Aggregation("total", aggs). // 设置聚合条件,并为聚合条件设置一个名字, 支持添加多个聚合条件,命名不一样即可。
            Size(0). // 设置分页参数 - 每页大小,设置为0代表不返回搜索结果,仅返回聚合分析结果
            Do(ctx) // 执行请求
    
        if err != nil {
            // Handle error
            panic(err)
        }
    
        // 使用ValueCount函数和前面定义的聚合条件名称,查询结果
        agg, found := searchResult.Aggregations.ValueCount("total")
        if found {
            // 打印结果,注意:这里使用的是取值运算符
            fmt.Println(*agg.Value)
        }
    }
    

    提示:go elastic库,所有聚合分析结果都是通过对应的函数获取结果,例如前面的例子,Value Count聚合结果,通过ValueCount函数获取结果,后面继续介绍其他指标聚合的用法。

    2.Cardinality

    基数聚合,也是用于统计文档的总数,跟Value Count的区别是,基数聚合会去重,不会统计重复的值,类似SQL的count(DISTINCT 字段)用法。

    提示:基数聚合是一种近似算法,统计的结果会有一定误差,不过性能很好。

    // 创建Cardinality指标聚合
    aggs := elastic.NewCardinalityAggregation().
            Field("order_id") // 设置统计字段
    
    searchResult, err := client.Search().
            Index("kibana_sample_data_flights"). // 设置索引名
            Query(elastic.NewMatchAllQuery()). // 设置查询条件
            Aggregation("total", aggs). // 设置聚合条件,并为聚合条件设置一个名字
            Size(0). // 设置分页参数 - 每页大小,设置为0代表不返回搜索结果,仅返回聚合分析结果
            Do(ctx) // 执行请求
    
    if err != nil {
        // Handle error
        panic(err)
    }
    
    // 使用Cardinality函数和前面定义的聚合条件名称,查询结果
    agg, found := searchResult.Aggregations.Cardinality("total")
    if found {
        // 打印结果,注意:这里使用的是取值运算符
        fmt.Println(*agg.Value)
    }
    

    3.Avg

    求平均值

    // 创建Avg指标聚合
    aggs := elastic.NewAvgAggregation().
            Field("price") // 设置统计字段
    
    searchResult, err := client.Search().
            Index("kibana_sample_data_flights"). // 设置索引名
            Query(elastic.NewMatchAllQuery()). // 设置查询条件
            Aggregation("avg_price", aggs). // 设置聚合条件,并为聚合条件设置一个名字
            Size(0). // 设置分页参数 - 每页大小,设置为0代表不返回搜索结果,仅返回聚合分析结果
            Do(ctx) // 执行请求
    
    if err != nil {
        // Handle error
        panic(err)
    }
    
    // 使用Avg函数和前面定义的聚合条件名称,查询结果
    agg, found := searchResult.Aggregations.Avg("avg_price")
    if found {
        // 打印结果,注意:这里使用的是取值运算符
        fmt.Println(*agg.Value)
    }
    

    4.Sum

    求和计算

    // 创建Sum指标聚合
    aggs := elastic.NewSumAggregation().
            Field("price") // 设置统计字段
    
    searchResult, err := client.Search().
            Index("kibana_sample_data_flights"). // 设置索引名
            Query(elastic.NewMatchAllQuery()). // 设置查询条件
            Aggregation("total_price", aggs). // 设置聚合条件,并为聚合条件设置一个名字
            Size(0). // 设置分页参数 - 每页大小,设置为0代表不返回搜索结果,仅返回聚合分析结果
            Do(ctx) // 执行请求
    
    if err != nil {
        // Handle error
        panic(err)
    }
    
    // 使用Sum函数和前面定义的聚合条件名称,查询结果
    agg, found := searchResult.Aggregations.Sum("total_price")
    if found {
        // 打印结果,注意:这里使用的是取值运算符
        fmt.Println(*agg.Value)
    }
    

    5.Max

    求最大值

    // 创建Sum指标聚合
    aggs := elastic.NewMaxAggregation().
            Field("price") // 设置统计字段
    
    searchResult, err := client.Search().
            Index("kibana_sample_data_flights"). // 设置索引名
            Query(elastic.NewMatchAllQuery()). // 设置查询条件
            Aggregation("max_price", aggs). // 设置聚合条件,并为聚合条件设置一个名字
            Size(0). // 设置分页参数 - 每页大小,设置为0代表不返回搜索结果,仅返回聚合分析结果
            Do(ctx) // 执行请求
    
    if err != nil {
        // Handle error
        panic(err)
    }
    
    // 使用Max函数和前面定义的聚合条件名称,查询结果
    agg, found := searchResult.Aggregations.Max("max_price")
    if found {
        // 打印结果,注意:这里使用的是取值运算符
        fmt.Println(*agg.Value)
    }
    

    6.Min

    求最小值

    // 创建Min指标聚合
    aggs := elastic.NewMinAggregation().
            Field("price") // 设置统计字段
    
        searchResult, err := client.Search().
            Index("kibana_sample_data_flights"). // 设置索引名
            Query(elastic.NewMatchAllQuery()). // 设置查询条件
            Aggregation("min_price", aggs). // 设置聚合条件,并为聚合条件设置一个名字
            Size(0). // 设置分页参数 - 每页大小,设置为0代表不返回搜索结果,仅返回聚合分析结果
            Do(ctx) // 执行请求
    
    if err != nil {
        // Handle error
        panic(err)
    }
    
    // 使用Min函数和前面定义的聚合条件名称,查询结果
    agg, found := searchResult.Aggregations.Min("min_price")
    if found {
        // 打印结果,注意:这里使用的是取值运算符
        fmt.Println(*agg.Value)
    }
    

    相关文章

      网友评论

          本文标题:golang elasticsearch指标聚合(metrics

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