带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(5)

简介: 带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(5)

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.21.Aggregations(4) https://developer.aliyun.com/article/1229240


6、速率聚合 rate

 

速率聚合只能在 date_histogram 中使用,计算每个日期存储桶中的数据在日期粒度上的平均值。参与计算的字段可以为数值类型或者直方图类型。

 

1)基础用法

 

以年为区间划分存储桶,计算 price 字段的数量在月上的速率聚合:

 

首先插入不同年份的数据:


POST _bulk
{"index":{"_index":"order","_id":8}}
{"sales_name":"Cindy","product_name":"iphone11","brand":"Apple","count":20,"price":"8699.45","order_time":"2020-09-03"}
{"index":{"_index":"order","_id":9}}
{"sales_name":"Andy","product_name":"mate10","brand":"HUAWEI","count":22,"price":"9759.25","order_time":"2020-08-03"}
{"index":{"_index":"order","_id":10}}
{"sales_name":"Lily","product_name":"iphone12","brand":"Apple","count":25,"price":"7876.33","order_time":"2020-08-23"}

计算聚合:

GET order/_search?size=0
{
  "size": 0,
  "aggs": {
    "order_date": {
      "date_histogram": {
        "field": "order_time",
        "calendar_interval": "year"  
      },
      "aggs": {
        "price_rate": {
          "rate": {
            "field": "price",
            "unit": "month" ,
            "mode" : "value_count"
          }
        }
      }
    }
  }
}

l order_date,price_rate 自定义名称,将在结果中返回

l calendar_interval 定义了数据文档划分的桶的时间粒度,此处定义为年粒度

l unit 定义了速率计算的粒度

l mode 定义了速率计算对数值字段处理的方式,默认为 sum 计算字段的和,此处为 value_count 计算字段的数量


返回结果: 

{
  ...
  "aggregations" : {
    "order_date" : {
      "buckets" : [
        {
          "key_as_string" : "2020-01-01T00:00:00.000Z",
          "key" : 1577836800000,
          "doc_count" : 3,
          "price_rate" : {
            "value" : 0.25
          }
        },
        {
          "key_as_string" : "2021-01-01T00:00:00.000Z",
          "key" : 1609459200000,
          "doc_count" : 7,
          "price_rate" : {
            "value" : 0.5
          }
        }
      ]
    }
  }
}

value 的计算方法为 rate 字段的和/数量除以 rate 日期单位的值。以上面的第一个 0.25 的结果为例,计算出 2020 年的订单数量为 3 后,再除以一年中的月份数量 12。

 

2)分桶的时间区间如何与rate中的时间单位配合使用


image.png

如果 date_histogram 不是rate histogram 的直接父级,则还有其他限制。此时,rate 时间间隔和 date_histogram 时间间隔必须位于同一组:[second、minute、hour、day、week] 或 [month、quarter、year]。例如,如果 date_histogram 是基于 month 的,则 rate 只支持 month、quarter 或 year。

 

3)脚本

 

对产品售卖价格进行修改后,再进行聚合:


GET order/_search?size=0
{
  "runtime_mappings": {
    "price.adjusted": {
      "type": "double",
      "script": {
        "source": "emit(doc['price'].value * params.adjustment)",
        "params": {
          "adjustment": 0.8
        }
      }
    }
  },
  "aggs": {
    "rate_date": {
      "date_histogram": {
        "field": "order_time",
        "calendar_interval": "year"
      },
      "aggs": {
        "avg_price": {
          "rate": {
            "field": "price.adjusted",
            "unit":"month"
          }
        }
      }
    }
  }
}

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.21.Aggregations(6) https://developer.aliyun.com/article/1229237

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
域名解析 小程序 Linux
朋友圈超火的盲盒交友小程序,完整搭建教程及源码分享~(多图)
朋友圈超火的盲盒交友小程序,完整搭建教程及源码分享~(多图)
朋友圈超火的盲盒交友小程序,完整搭建教程及源码分享~(多图)
|
前端开发 开发者
Hooks:前端开发的革命性进步
Hooks、前端开发的革命性进步
|
人工智能 运维 IDE
通义灵码初体验:创新与惊喜并存
作为一名DevOps开发运维人员,我通过使用通义灵码个人版(v1.4.5)的代码生成和补全功能,显著提升了50%的工作效率。本文档详细记录了从安装配置到具体功能使用的全过程,包括代码解释、自动生成单元测试代码及根据需求生成新代码等功能的实际体验,展示了其高效、准确的特点,并提出了改进建议。
|
存储 NoSQL MongoDB
MongoDB 8.0现已全面可用
如何从MongoDB旧版本升级至8.0,可登录参考升级指南:https://www.mongodb.com/zh-cn/docs/manual/tutorial/upgrade-revision/
|
Java 数据库连接 数据库
sqlLite 如何使用数据库连接池
这篇文章介绍了如何在SQLite数据库操作中使用HikariCP连接池以减少频繁建立和释放数据库连接的资源消耗,包括在Maven项目中添加依赖、配置HikariDataSource对象以及实现数据库连接池的具体代码示例。
|
网络协议
网络协议概览:HTTP、UDP、TCP与IP
理解这些基本的网络协议对于任何网络专业人员都是至关重要的,它们不仅是网络通信的基础,也是构建更复杂网络服务和应用的基石。网络技术的不断发展可能会带来新的协议和标准,但这些基本协议的核心概念和原理将继续是理解和创新网络技术的关键。
699 0
|
设计模式 Java 程序员
静态代理与动态代理
静态代理与动态代理
184 0
|
Java Maven 开发者
Springboot 整合 knife4j | Swagger文档最简单配置
Springboot 整合 knife4j | Swagger文档最简单配置
2410 0
Springboot 整合 knife4j | Swagger文档最简单配置
|
JavaScript
vue子组件向父组件传参的方式
vue子组件向父组件传参的方式
203 0
|
JavaScript
成功解决:Uncaught TypeError: Cannot read property 'search' of undefined
成功解决:Uncaught TypeError: Cannot read property 'search' of undefined

热门文章

最新文章