elasticsearch 是否可以按日期之间的每日时间范围进行搜索?

bqujaahr  于 2022-12-29  发布在  ElasticSearch
关注(0)|答案(1)|浏览(201)

我可以使用聚合在两个时间戳之间创建一些统计信息,如下所示:

{
  "size": 0,
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "status": "ok"
          }
        },
        {
          "term": {
            "deviceId": "123456789"
          }
        },
        {
          "range": {
            "time": {
              "gte": 1669852800,
              "lt": 1671062400
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "results": {
      "date_histogram": {
        "field": "time",
        "fixed_interval": "60",
      }
    }
  }
}

查询结果是否可以只包含每天特定的时间范围,例如12月1日到12月15日每天早上7点到9点,如何实现?

pgky5nke

pgky5nke1#

我在elasticsearch v7.15.2上找到了如下解决方案:

{
  "size": 0,
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "status": "ok"
          }
        },
        {
          "term": {
            "deviceId": "123456789"
          }
        },
        {
          "range": {
            "time": {
              "gte": 1669852800,
              "lt": 1671062400
            }
          }
        },
        {
          "script": {
            "script": {
              "source": "doc.time.value.getHourOfDay() >= params.min && doc.time.value.getHourOfDay() < params.max",
              "params": {
                "min": 8,
                "max": 10
              }
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "results": {
      "date_histogram": {
        "field": "time",
        "fixed_interval": "60"
      }
    }
  }
}

语法与上面的注解稍有不同,但它是有效的。

相关问题