You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在日期区间内按每日特定时间段查询Elasticsearch数据?

如何在Elasticsearch中查询日期区间内每日特定时间段的数据

完全可以实现这类需求,你只需要在原有的布尔过滤器中新增一个脚本过滤器,用来筛选每天特定小时范围内的数据。以下是修改后的完整DSL:

{
  "size": 0,
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "status": "ok"
          }
        },
        {
          "term": {
            "deviceId": "123456789"
          }
        },
        {
          "range": {
            "time": {
              "gte": 1669852800,  // 对应2022-12-01 00:00:00的时间戳
              "lt": 1671062400    // 对应2022-12-16 00:00:00的时间戳,确保覆盖12.1-12.15全天
            }
          }
        },
        {
          "script": {
            "source": "doc['time'].value.getHour() >= 7 && doc['time'].value.getHour() < 9"
          }
        }
      ]
    }
  },
  "aggs": {
    "results": {
      "date_histogram": {
        "field": "time",
        "fixed_interval": "60m",  // 补充单位,按60分钟间隔聚合;若需按天聚合可改为"1d"
        "format": "yyyy-MM-dd HH:mm"  // 可选:让聚合结果的时间格式更直观
      }
    }
  }
}

关键说明:

  • 新增的script过滤器会提取每个文档time字段的小时数,判断是否落在**7点(含)到9点(不含)**的区间内,精准筛选每日的目标时间段。
  • 原DSL中的fixed_interval参数缺少单位,这里补充为60m;如果你的聚合需求是按天统计,可改为1d。
  • 时间范围的lt值设为12月16日0点,确保覆盖12月15日全天的所有数据。

如果你的Elasticsearch版本支持,也可以用range查询结合脚本字段的写法,效果一致:

{
  "range": {
    "script": {
      "source": "doc['time'].value.getHour()",
      "gte": 7,
      "lt": 9
    }
  }
}

内容的提问来源于stack exchange,提问作者James Fu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:20:41