ES的DSL查询,按照时间段分组统计之date_histogram

复制代码
            <div id="content_views" class="htmledit_views">
                <h4><a name="t0"></a>1. 需求</h4> 

对于es保存的数据,需要根据其时间格式或时间戳格式的字段进行分组统计,计算每天或每小时的某字段统计值

2. 使用方式
c 复制代码
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "status": "0"
          }
        }
      ],
      "must_not": [],
      "should": []
    }
  },
  "from": 0,
  "size": 0,
  "sort": [],
  "aggs": {
    "dateAgg": {
      "date_histogram": {
        "field": "timestamp",
        "offset": "-8h",
        "format": "yyyy-MM-dd",
        "calendar_interval": "1d",
        "order": [
          {
            "timeSum": "desc"
          }
        ]
      },
      "aggs": {
        "timeSum": {
          "sum": {
            "field": "statusDurationSecond"
          }
        }
      }
    }
  }
}
3. 注意点
  • offset: -8h:是因为es默认是按照UTC的时间进行查询的,所以需要减掉8小时

  • calendar_interval:可选内容有

    java 复制代码
       
       
       
        
    * 
           
           
           
            
            
            
           
           
           
    
           
           
           
    
            
            
            
             
             毫秒:1ms 10ms
            
            
            
           
           
           
    
        
    * 
           
           
           
            
            
            
           
           
           
    
           
           
           
    
            
            
            
             
             秒: second/1s 10s
            
            
            
           
           
           
    
        
    * 
           
           
           
            
            
            
           
           
           
    
           
           
           
    
            
            
            
             
             分钟: minute/1m 10m
            
            
            
           
           
           
    
        
    * 
           
           
           
            
            
            
           
           
           
    
           
           
           
    
            
            
            
             
             小时: hout/1h 2h
            
            
            
           
           
           
    
        
    * 
           
           
           
            
            
            
           
           
           
    
           
           
           
    
            
            
            
             
             天: day/
             
             1d 
            
            
            
           
           
           
    
        
    * 
           
           
           
            
            
            
           
           
           
    
           
           
           
    
            
            
            
             
             星期: week/1w 
            
            
            
           
           
           
    
        
    * 
           
           
           
            
            
            
           
           
           
    
           
           
           
    
            
            
            
             
             月: month/1M 
            
            
            
           
           
           
    
        
    * 
           
           
           
            
            
            
           
           
           
    
           
           
           
    
            
            
            
             
             季度: quarter/1q 
            
            
            
           
           
           
    
        
    * 
           
           
           
            
            
            
           
           
           
    
           
           
           
    
            
            
            
             
             年: year/1y 
            
            
            
           
           
           
    
       
    
       
       
       
  • "format": "yyyy-MM-dd":只有date类型可以format,这里分组字段如果是long类型时间戳,format的结果是下图格式,无意义

相关推荐
SamDeepThinking13 小时前
用工厂模式和模板方法统一封装所有第三方的Access Token
java·后端·架构
@大迁世界13 小时前
33.如何在 React 中使用内联样式(inline styles)?
前端·javascript·react.js·前端框架·ecmascript
AI人工智能+电脑小能手13 小时前
【大白话说Java面试题】【Java基础篇】第17题:HashMap的加载因子为什么是0.75而不是1或0.5
java·开发语言·算法·哈希算法·散列表
CodeSheep13 小时前
DeepSeek的最新招人标准,太讽刺了。
前端·后端·程序员
huipeng92613 小时前
GateWay使用详解
java·spring boot·spring cloud·微服务·gateway
不法13 小时前
vue 地图路线渲染
前端·vue.js·ubuntu
GISer_Jing13 小时前
从“工具应用”到“系统重构”:AI时代前端研发的范式转移与哲学思辨
前端·人工智能·学习
我家媳妇儿萌哒哒13 小时前
Element ui el-dialog 在一个有滚动条的页面,打开一个弹框,完了再打开一个弹框后,滚动条可以滚动,怎么限制不能滚动。
前端·vue.js·ui
AKA__Zas13 小时前
初识多线程(初初识)
java·服务器·开发语言·学习方法
得想办法娶到那个女人13 小时前
Vite + Vue 项目打包为 Electron 桌面应用 完整指南
前端·vue.js·electron