Elasticsearch5.X聚合简介 淩亂°似流年 2022-06-06 14:00 192阅读 0赞 ## 聚合简介[编辑][Link 1] ## 类似于 DSL 查询表达式, 聚合也有 可组合 的语法:独立单元的功能可以被混合起来提供你需要的自定义行为。这意味着只需要学习很少的基本概念,就可以得到几乎无尽的组合。 要掌握聚合,你只需要明白两个主要的概念: 桶(Buckets) 满足特定条件的文档的集合 指标(Metrics) 对桶内的文档进行统计计算 这就是全部了!每个聚合都是一个或者多个桶和零个或者多个指标的组合。翻译成粗略的SQL语句来解释吧: SELECT COUNT(color) FROM table GROUP BY color <table style="border-collapse:collapse; border-spacing:0px; background-color:transparent; line-height:26px; color:rgb(68,68,68); font-size:15px; margin-bottom:1em; border:none; width:750px"> <tbody style="line-height:26px; vertical-align:top"> <tr style="line-height:26px"> <td align="left" style="padding:0.75em 0.2em 0px; line-height:26px; font-size:15px; vertical-align:top; border-top:none; border-right:none; border-left:none; border-bottom:1px solid rgb(229,234,228)"> <p style="margin-top:0px; margin-bottom:10px; font-size:16px"><a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/aggs-high-level.html#CO183-1" style="background-color:transparent; color:rgb(0,169,229); outline:none" rel="nofollow"><span style="color:rgb(68,68,68)"><img src="https://www.elastic.co/guide/cn/elasticsearch/guide/current/images/icons/callouts/1.png" alt="" style="border:0px; vertical-align:middle"></span></a></p> </td> <td align="left" style="padding:0.75em 0px 0px 0.2em; line-height:26px; font-size:15px; vertical-align:top; border-top:none; border-right:none; border-left:none; border-bottom:1px solid rgb(229,234,228)"> <p style="margin-top:0px; margin-bottom:10px; font-size:16px"><code style="font-family:Consolas,Menlo,"DejaVu Sans Mono","Bitstream Vera Sans Mono","Lucida Console"; font-size:0.9em; padding:0px 3px; color:rgb(85,85,85); background:rgb(248,248,248); display:inline; word-wrap:break-word; width:auto; overflow-x:auto; vertical-align:middle">COUNT(color)</code> 相当于指标。</p> </td> </tr> <tr style="line-height:26px"> <td align="left" style="padding:0.75em 0.2em 0px; line-height:26px; font-size:15px; vertical-align:top; border:none"> <p style="margin-top:0px; margin-bottom:10px; font-size:16px"><a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/aggs-high-level.html#CO183-2" style="background-color:transparent; color:rgb(0,169,229); outline:none" rel="nofollow"><span style="color:rgb(68,68,68)"><img src="https://www.elastic.co/guide/cn/elasticsearch/guide/current/images/icons/callouts/2.png" alt="" style="border:0px; vertical-align:middle"></span></a></p> </td> <td align="left" style="padding:0.75em 0px 0px 0.2em; line-height:26px; font-size:15px; vertical-align:top; border:none"> <p style="margin-top:0px; margin-bottom:10px; font-size:16px"><code style="font-family:Consolas,Menlo,"DejaVu Sans Mono","Bitstream Vera Sans Mono","Lucida Console"; font-size:0.9em; padding:0px 3px; color:rgb(85,85,85); background:rgb(248,248,248); display:inline; word-wrap:break-word; width:auto; overflow-x:auto; vertical-align:middle">GROUP BY color</code> 相当于桶。</p> </td> </tr> </tbody> </table> 桶在概念上类似于 SQL 的分组(GROUP BY),而指标则类似于 `COUNT()` 、 `SUM()` 、 `MAX()` 等统计方法。 ## 桶[编辑][Link 1] ## 桶 简单来说就是满足特定条件的文档的集合: * 一个雇员属于 男性 桶或者 女性 桶 * 奥尔巴尼属于 纽约 桶 * 日期2014-10-28属于 十月 桶 当聚合开始被执行,每个文档里面的值通过计算来决定符合哪个桶的条件。如果匹配到,文档将放入相应的桶并接着进行聚合操作。 桶也可以被嵌套在其他桶里面,提供层次化的或者有条件的划分方案。例如,辛辛那提会被放入俄亥俄州这个桶,而 整个 俄亥俄州桶会被放入美国这个桶。 Elasticsearch 有很多种类型的桶,能让你通过很多种方式来划分文档(时间、最受欢迎的词、年龄区间、地理位置等等)。其实根本上都是通过同样的原理进行操作:基于条件来划分文档。 ## 指标[编辑][Link 1] ## 桶能让我们划分文档到有意义的集合, 但是最终我们需要的是对这些桶内的文档进行一些指标的计算。分桶是一种达到目的的手段:它提供了一种给文档分组的方法来让我们可以计算感兴趣的指标。 大多数 指标 是简单的数学运算(例如最小值、平均值、最大值,还有汇总),这些是通过文档的值来计算。在实践中,指标能让你计算像平均薪资、最高出售价格、95%的查询延迟这样的数据。 ## 桶和指标的组合 ## 聚合 是由桶和指标组成的。 聚合可能只有一个桶,可能只有一个指标,或者可能两个都有。也有可能有一些桶嵌套在其他桶里面。例如,我们可以通过所属国家来划分文档(桶),然后计算每个国家的平均薪酬(指标)。 由于桶可以被嵌套,我们可以实现非常多并且非常复杂的聚合: 1.通过国家划分文档(桶) 2.然后通过性别划分每个国家(桶) 3.然后通过年龄区间划分每种性别(桶) 4.最后,为每个年龄区间计算平均薪酬(指标) 最后将告诉你每个 `<国家, 性别, 年龄>` 组合的平均薪酬。所有的这些都在一个请求内完成并且只遍历一次数据! 文章参考: [https://www.elastic.co/guide/cn/elasticsearch/guide/current/\_combining\_the\_two.html][https_www.elastic.co_guide_cn_elasticsearch_guide_current_combining_the_two.html] [Link 1]: https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/301_Aggregation_Overview.asciidoc [https_www.elastic.co_guide_cn_elasticsearch_guide_current_combining_the_two.html]: https://www.elastic.co/guide/cn/elasticsearch/guide/current/_combining_the_two.html
还没有评论,来说两句吧...