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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《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

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
存储 SQL 数据挖掘
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(1)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(1)
|
存储
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(2)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(2)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(11)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(11)
|
存储 自然语言处理 关系型数据库
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(14)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(14)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(10)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(10)
|
编解码 算法
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(6)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(6)
|
存储
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(3)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(3)
|
存储 索引
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(9)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(9)
|
存储 算法 索引
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(4)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(4)
|
存储
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(8)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(8)