当前位置: 首页 > article >正文

ElasticSearch:使用dsl语句同时查询出最近2小时、最近1天、最近7天、最近30天的数量

场景

需要使用dsl语句同时查询出最近2小时、最近1天、最近7天、最近30天的数量,如果按照常规逻辑,需要写四个dsl语句,才能查询出来,那么能不能使用一句dsl就可以查询出结果呢?

show time

GET alarm_forward_history_*/_search
{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "sourceName": {
              "value": "运维123"
            }
          }
        },
        {
          "term": {
            "sourceAlertKey": {
              "value": "生产问题描述223"
            }
          }
        },
        {
          "term": {
            "cmdb.app_name": {
              "value": "dba数据库"
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "date": {
      "date_range": {
        "field": "@timestamp",
        "ranges": [
          {
            "from": "now-2h",
            "to": "now",
            "key": "lastTwoHour"
          },
          {
            "from": "now-1d",
            "to": "now",
            "key": "lastDay"
          },
          {
            "from": "now-7d",
            "to": "now",
            "key": "lastSevenDay"
          },
          {
            "from": "now-30d",
            "to": "now",
            "key": "lastMonth"
          }
        ]
      }
    }
  }
}

输出结果大致如下:

"aggregations" : {
    "date" : {
      "buckets" : [
        {
          "key" : "lastMonth",
          "from" : 1.728359639296E12,
          "from_as_string" : "2024-10-08T03:53:59.296Z",
          "to" : 1.730951639296E12,
          "to_as_string" : "2024-11-07T03:53:59.296Z",
          "doc_count" : 7
        },
        {
          "key" : "lastSevenDay",
          "from" : 1.730346839296E12,
          "from_as_string" : "2024-10-31T03:53:59.296Z",
          "to" : 1.730951639296E12,
          "to_as_string" : "2024-11-07T03:53:59.296Z",
          "doc_count" : 0
        },
        {
          "key" : "lastDay",
          "from" : 1.730865239296E12,
          "from_as_string" : "2024-11-06T03:53:59.296Z",
          "to" : 1.730951639296E12,
          "to_as_string" : "2024-11-07T03:53:59.296Z",
          "doc_count" : 0
        },
        {
          "key" : "lastTwoHour",
          "from" : 1.730944439296E12,
          "from_as_string" : "2024-11-07T01:53:59.296Z",
          "to" : 1.730951639296E12,
          "to_as_string" : "2024-11-07T03:53:59.296Z",
          "doc_count" : 0
        }
      ]
    }
  }
}

总结

  • 直接采用date_range函数,即可解决

http://www.kler.cn/a/389491.html

相关文章:

  • JFROG相关API
  • 深入理解接口测试:实用指南与最佳实践5.0(三)
  • 俏美韵从心出发,与女性一道为健康生活贡献力量
  • webpack loader全解析,从入门到精通(10)
  • 【Rust练习】21.动态数组 Vector
  • vue项目npm run serve出现【- Network: unavailable】(从排查到放弃)
  • 使用概率表示和原型学习的有效半监督医学图像分割|文献速递-基于深度学习的病灶分割与数据超分辨率
  • win11电脑无法找到声音输出设备怎么办?查看解决方法
  • gan的所有种类,人工智能 机器学习,gan的所有算法
  • 离线 快速搭建 docker docker-compose k8s 环境
  • 15.UE5等级、经验、血条,魔法恢复和消耗制作
  • ubuntu下安装 git 及部署cosyvoice(1)
  • ffmpeg视频滤镜:组合两个视频为立体视频- framepack
  • 【计算机网络】网络框架
  • Bash Shell - 获取日期、时间
  • 【Python】解析 XML
  • Linux学习笔记之定时任务调度
  • Spring学习笔记(三)
  • [Linux] 进程间通信
  • 【C】一文速学----线程池原理与实战
  • 18. 友元
  • 分享三个python爬虫案例
  • ServletContext介绍
  • 别再为视频转文字烦恼啦!这10个转换工具帮你一键搞定。
  • UE5 随机生成地牢关卡
  • Python酷库之旅-第三方库Pandas(206)