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

相关推荐
m***06689 分钟前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
Anastasiozzzz31 分钟前
Java异步编程:CompletableFuture从入门到底层实现
java·开发语言
xiaomin-Michael40 分钟前
netty学习
java
Swift社区1 小时前
React 项目生产环境构建与静态资源优化
前端·react.js·前端框架
A小码哥1 小时前
基于 Trae + 国产 GLM-4.7模型的任务驱动式软件开发实践
前端
上海合宙LuatOS1 小时前
LuatOS核心库API——【fft 】 快速傅里叶变换
java·前端·人工智能·单片机·嵌入式硬件·物联网·机器学习
瑶瑶领先_1 小时前
react - isValidElement 判断参数是否是一个有效的ReactElement
前端
瑶瑶领先_1 小时前
js 数字精确度
前端
瑶瑶领先_1 小时前
图片标签拖拽 && url、base64、Blob、File、canvas之间相互转换
前端
爱敲代码的小鱼1 小时前
web后端开发SpringBootWeb的入门:
java·spring boot·spring