模板网站建设公司,音乐网站开发目的,义乌网站公司,网站访问量过大1.聚合的分类
聚合可以实现对文档数据的统计、分析、运算。聚合常见的分类#xff1a; • 桶(Bucket)聚合#xff1a;用来对文档进行分组#xff0c;比如 TermAggregation:按照文档字段值分组#xff1b; Date HIstogram:按照日期阶梯分组#xff0c;例如一周为一组…1.聚合的分类
聚合可以实现对文档数据的统计、分析、运算。聚合常见的分类 • 桶(Bucket)聚合用来对文档进行分组比如 TermAggregation:按照文档字段值分组 Date HIstogram:按照日期阶梯分组例如一周为一组或者一月为一组 • 度量(Metric)聚合:用以计算一些值比如:最大值、最小值、平均值等 Avg:求平均值; Max:求最大值 Min:求最小值 Stats:同时求max、min、avg、sum等 • 管道(pipeline)聚合:其它聚合的结果为基础做聚合例如按照酒店名称进行分组桶聚合完成之后计算每一组酒店价格的平均值度量聚合 ES官方提供了几十种聚合方式官方地址为ES官方地址。 我们需要注意的是参与聚合的字段不能够是分词的字段那样是没有意义的参与聚合的字段类型可以是keyword、数值、日期、布尔类型。
2. DSL实现的 Bucket聚合
案例假如现在要统计所有数据中的酒店品牌有几种此时可以按照酒店品牌进行聚合。 语法如下
GET /hotel/_search
{size:0## 设置size为0结果中不包含文档只包含聚合结果aggs:{ ## 定义聚合brandAgg:{ ## 给聚合起个名字terms:{ ## 聚合的类型例如按照品牌值聚合所以选择termfield:brand## 参与聚合的字段size:20 ## 希望获取的聚合结果数量假如是200种但是我只需要显示10种就需要指定}}}} 默认情况下buckt聚合会统计bucket内的文档数量记为_count,并且按照_count降序排序我们可以修改结果排序方式语法如下
GET /hotel/_search
{
size:0
aggs:{ brandAgg:{terms:{field:brand“order”:{_count: asc ## 指定排序方式按照_count升序排序}size:20}}}
} 上面的这种聚合方式是对整个索引库文档做聚合对内存消耗非常大我们可以限定要聚合的文档范围只要添加query查询条件即可语法如下 GET /hotel/_search
{
query:{ ## 指定查询条件range : {price:{lte:200 //只对200元以下的文档聚合}}},
size:0
aggs:{ brandAgg:{terms:{field:brand“order”:{_count: asc ## 指定排序方式按照_count升序排序}size:20}}}
} 3. DSL 实现Metrics聚合
例如我们要求获取每个品牌的用户评分的min,max,avg等值。由于是对每个品牌的评分做聚合需要先将品牌分组将分组之后的结果进行计算语法余下
{size:0aggs:{brandAgg:{ terms:{field:brandsize:20 },aggs{ ## 是brands聚合的子聚合也就是分组后对每组分别计算score_stats:{ ## 聚合名称stats:{ ## 聚合类型这里stats可以计算min、max、avg等field:score ##聚合字段这里是score}}}}}}