前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES系列15:ES的指标聚合有哪些呢?在这里,我都给你总结好了

ES系列15:ES的指标聚合有哪些呢?在这里,我都给你总结好了

作者头像
方才编程_公众号同名
发布2020-11-13 10:47:53
9450
发布2020-11-13 10:47:53
举报
文章被收录于专栏:方才编程方才编程

本文目标

通过本文,你将系统掌握常用的指标聚合,了解每种指标聚合的使用场景和语法。

ps:本文基于ES 7.7.1【文末附《指标聚合Metric Agg详解》xmind 获取方式】

本文知识导航

ps:因为篇幅问题,TeHero在文章中就只通过示例进行简单讲解,涉及其他的注意事项,重要参数等,见xmind截图,毕竟一图胜千言!【文末有xmind源文件获取方式】。

01 写在前面

通过上图我们可以看到,一共有18种类型的 Metrics Agg,而且这只是ES7.7.1,TeHero是在6月初安装的ES,当时最新版就是7.7.1,但是半个月后,ES更新了!!!又!!又!!又!!新增了几种聚合方法。

所以,对于每一种聚合类型,我们都去详细学习并掌握是比较费时间的,个人建议可以按如下方式学习:

  • 1)了解每种聚合类型的使用场景,简单而言,就是知道每种聚合是干嘛的,能对数据做怎样的分析;
  • 2)掌握常用的聚合操作,了解其注意事项和重要参数;
  • 3)完成以上2点,我觉得就差不多了,在实际工作中,面对需求,我们知道可以用哪些聚合操作解决需求即可,需要用到的时候再去详细学习具体的语法。

02 Metrics Agg 详解

Metrics Aggregations 指标分析类型,就是一些数学运算,对文档字段进行统计分析,类似于 sql 的 COUNT() 、 SUM() 、 MAX() 等统计方法

2.1 4个基本统计聚合

这4个聚合我相信各位小伙伴一看就能明白,就简答看个示例,学习下语法即可:

代码语言:javascript
复制
POST / exams / _search ? size = 0 {
  "aggs": {
    "avg_grade": {
      "avg": {
        "field": "grade"
      }
    }
  }
}

结果:

代码语言:javascript
复制
{
  ...
  "aggregations": {
    "avg_grade": {
      "value": 75.0
    }
  }
}

2.2 Value Count value计数聚合

简单示例,了解语法:

代码语言:javascript
复制
POST / sales / _search ? size = 0 {
  "aggs": {
    "types_count": {
      "value_count": {
        "field": "type"
      }
    }
  }
}

结果:

代码语言:javascript
复制
{ ...
"aggregations": {
    "types_count": {
      "value": 7
    }
  }
}

2.3 Stats 统计聚合

就是一个聚合函数,包含了上述5种聚合,简单看个示例,学习语法:

代码语言:javascript
复制
POST / exams / _search ? size = 0 {
  "aggs": {
    "grades_stats": {
      "stats": {
        "field": "grade"
      }
    }
  }
}

结果:

代码语言:javascript
复制
{ ...
  "aggregations": {
    "grades_stats": {
      "count": 2,
      "min": 50.0,
      "max": 100.0,
      "avg": 75.0,
      "sum": 150.0
    }
  }
}

2.4 Weighted Avg 加权平均聚合

加权平均聚合和Avg Agg类似,掌握其计算公式: ∑(value * weight) / ∑(weight)。

场景示例:博客文章指数计算:阅读量*作者影响力

代码语言:javascript
复制
POST / blogs_index / _search {
  "size": 0,
  "aggs": {
    "weighted_grade": {
      "weighted_avg": {
        "value": {
          "field": "views"
        },
        "weight": {
          "field": "influence"
        }
      }
    }
  }
}

结果:

代码语言:javascript
复制
{
  ...
  "aggregations": {
    "weighted_grade": {
      "value": 70.0
    }
  }
}

2.5 cardinality 基数聚合

场景示例:统计已销售汽车的颜色一共有多少种

代码语言:javascript
复制
GET / cars / _search {
  "size": 0,
  "aggs": {
    "distinct_colors": {
      "cardinality": {
        "field": "color"
      }
    }
  }
}

结果:

代码语言:javascript
复制
"aggregations": {
  "distinct_colors": {
    "value": 3
  }
}

2.6 Top Hits 热门匹配聚合

场景示例:获取每种类型商品,其中价格最高的商品详情

代码语言:javascript
复制
POST / test / _search ? size = 0 {
  "aggs": {
    "top_tags": {
      "terms": {
        "field": "type",
        "size": 3
      },
      "aggs": {
        "top_sales_hits": {
          "top_hits": {
            "sort": [{
              "price": {
                "order": "desc"
              }
            }],
            "_source": {
              "includes": ["date", "price"]
            },
            "size": 1
          }
        }
      }
    }
  }
}

结果:

代码语言:javascript
复制
"aggregations": {
  "top_tags": {
    "doc_count_error_upper_bound": 0,
    "sum_other_doc_count": 0,
    "buckets": [{
      "key": 1,
      "doc_count": 2,
      "top_sales_hits": {
        "hits": {
          "total": {
            "value": 2,
            "relation": "eq"
          },
          "max_score": null,
          "hits": [{
            "_index": "test",
            "_type": "_doc",
            "_id": "ovDRLXMBqw5d_PggL2w6",
            "_score": null,
            "_source": {
              "date": 6435,
              "price": 3
            },
            "sort": [3]
          }]
        }
      }
    }, {
      "key": 2,
      "doc_count": 2,
      "top_sales_hits": {
        "hits": {
          "total": {
            "value": 2,
            "relation": "eq"
          },
          "max_score": null,
          "hits": [{
            "_index": "test",
            "_type": "_doc",
            "_id": "o_DRLXMBqw5d_PggL2w6",
            "_score": null,
            "_source": {
              "date": 5525,
              "price": 5
            },
            "sort": [5]
          }]
        }
      }
    }]
  }
}

2.7 Top Metrics 最高度量标准聚合

看个示例,对比Top Hit Agg 的例子,如下DSL和上述例子效果一致,只是响应结构不同:

代码语言:javascript
复制
POST / sales / _search ? size = 0 {
  "aggs": {
    "top_tags": {
      "terms": {
        "field": "type",
        "size": 3
      },
      "aggs": {
        "top_sales_hits": {
          "top_metrics": {
            "metrics": [{
              "field": "date"
            }, {
              "field": "price"
            }],
            "sort": {
              "price": "desc"
            }
          }
        }
      }
    }
  }
}

结果:

代码语言:javascript
复制
"aggregations": {
  "top_tags": {
    "doc_count_error_upper_bound": 0,
    "sum_other_doc_count": 0,
    "buckets": [{
      "key": 1,
      "doc_count": 2,
      "top_sales_hits": {
        "top": [{
          "sort": [3],
          "metrics": {
            "date": 6435,
            "price": 3
          }
        }]
      }
    }, {
      "key": 2,
      "doc_count": 2,
      "top_sales_hits": {
        "top": [{
          "sort": [5],
          "metrics": {
            "date": 5525,
            "price": 5
          }
        }]
      }
    }]
  }
}

2.8 剩余8种Metric聚合

更多详情内容,可参考官网。

下期预告:管道聚合详解【关注公众号:方才编程,系统学习ES

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 方才编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档