分享
  1. 首页
  2. 文章

go中 elastic 聚合统计(2)

545305939 · · 2033 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

六、占比百分位 min,max,sum,avg 统计

func aggsMaxMinSumAvg(index string) {

client :=getCli()

aggsMax :=es.NewMaxAggregation().Field("amount")

aggsMin :=es.NewMinAggregation().Field("amount")

aggsAvg :=es.NewAvgAggregation().Field("amount")

aggsSum :=es.NewSumAggregation().Field("amount")

result, err := client.Search().Index(index).Size(0).Aggregation("avg", aggsAvg).Aggregation("min", aggsMin).Aggregation("sum", aggsSum).Aggregation("max", aggsMax).Do(context.Background())

if err !=nil {

fmt.Println("err:", err)

return

}

min, err := result.Aggregations["min"].MarshalJSON()

fmt.Sprintf("min:%v,%v", string(min), err)

max, err := result.Aggregations["max"].MarshalJSON()

fmt.Sprintf("min:%v,%v", string(max), err)

avg, err := result.Aggregations["avg"].MarshalJSON()

fmt.Sprintf("max:%v,%v", string(avg), err)

sum, err := result.Aggregations["sum"].MarshalJSON()

fmt.Sprintf("sum:%v,%v", string(sum), err)

}

七、按指定字段分类统计

func aggsProName(indexstring) {

client :=getCli()

agg :=es.NewTermsAggregation().Field("proName.keyword")

result, err := client.Search().Index(index).Size(0).Aggregation("proName", agg).Do(context.Background())

if err !=nil {

fmt.Println("err:", err)

return

}

b, err := result.Aggregations["proName"].MarshalJSON()

obj :=AggsProNameCount{}

err =json.Unmarshal(b, &obj)

if err !=nil {

fmt.Println("err:", err)

return

}

for _, v :=range obj.Buckets {

fmt.Sprintf("商品名称:%s,数量:%d", v.Key, v.Count)

}

}

type AggsProNameCount struct { Buckets []struct { Key string `json:"key"` Count int64 `json:"doc_count"` } `json:"buckets"`}

八、按照时间分类,分类后在细分统计

func aggsOrder(index string, start, end int64, fixedInterval string) {

client :=getCli()

query :=es.NewRangeQuery("createTime")

if start !=0 {

query.Gte(start)

}

if end !=0 {

query.Lte(end)

}

amount :=es.NewAvgAggregation().Field("amount")

amountSum :=es.NewSumAggregation().Field("amount")

dayAvg :=es.NewDateHistogramAggregation().Field("createTime").Interval("day").MinDocCount(0).SubAggregation("avg", amount).SubAggregation("sum", amountSum)

da :=es.NewDateHistogramAggregation().Interval(fixedInterval).Field("createTime").MinDocCount(0).SubAggregation("avg", dayAvg)

result, err := client.Search().Index(index).Query(query).Size(0).Aggregation("day", da).Do(context.Background())

if err !=nil {

fmt.Println("err:", err)

return

}

b, err := result.Aggregations["day"].MarshalJSON()

param :=AggsCount{}

err =json.Unmarshal(b, &param)

if err !=nil {

fmt.Println("err:", err)

return

}

var sum int64

for _, v :=range param.Buckets {

fmt.Sprintf("time:%d 数量:%d", v.Key,, v.Count)

sum += v.Count

}

fmt.Println("sum:", sum)

}

type AggsCount struct { Buckets []struct { Key int64 `json:"key"` Count int64 `json:"doc_count"` } `json:"buckets"`}


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2033 次点击
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏