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

相关推荐
一灯架构42 分钟前
90%的人答错!一文带你彻底搞懂ArrayList
java·后端
小李子呢02111 小时前
前端八股CSS(2)---动画的实现方式
前端·javascript
Y4090012 小时前
【多线程】线程安全(1)
java·开发语言·jvm
布局呆星2 小时前
SpringBoot 基础入门
java·spring boot·spring
风吹迎面入袖凉3 小时前
【Redis】Redisson的可重入锁原理
java·redis
w6100104663 小时前
cka-2026-ConfigMap
java·linux·cka·configmap
GreenTea3 小时前
从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码
前端·人工智能·后端
语戚3 小时前
力扣 968. 监控二叉树 —— 贪心 & 树形 DP 双解法递归 + 非递归全解(Java 实现)
java·算法·leetcode·贪心算法·动态规划·力扣·