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的结果是下图格式,无意义

相关推荐
杨运交33 分钟前
[071][验证码模块]基于Spring拦截器的验证码认证设计思想
java·后端·spring
Geek-Chow1 小时前
CountDownLatch in Java
java
linux_cfan1 小时前
17 · 引擎适配器全景:HLS/DASH/Vimeo/Mux/Cast
前端·javascript·音视频
SL_staff1 小时前
从RBAC到场景化授权:《无忧·企业文档》三级权限模型的技术实践解析
java·开源·产品
计算机魔术师1 小时前
烧掉2780亿美元还不够?OpenAI的资本豪赌让人头皮发麻
前端
传奇开心果编程2 小时前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习
SL_staff2 小时前
财务系统慎用低代码?从数据模型闭环看合规落地的技术实践
java·低代码·全栈
IT_陈寒2 小时前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端
滕州市燕猫虎计算机科技工作室个体工商户2 小时前
IDEA:Command line is too long
java·ide·intellij-idea
卡布鲁2 小时前
React useMemo 与 useCallback 完全指南:原理、场景与避坑
前端·react.js