ElasticSearch - 在一系列日期之间搜索以比较它们

ElasticSearch - Search between a range of dates to compare them

我是 ElasticSearch(使用 7.6 版)的新手,正在尝试找出如何在两个时间段之间进行搜索。我正在尝试的一个查询是查询 2019 年第 12 周和 2020 年第 12 周。目的是比较结果。在阅读文档和搜索示例时,我已经接近我正在寻找的东西。

最简单的方法是使用两个不同的日期触发两个查询。但我想限制查询的数量。我根据阅读文档编写的最新查询是使用 聚合 ,但我不确定这是正确的方法:

GET sample-data_*/_search/
{
"query": {
  "bool": {
    "must": [
      {
        "range": {
          "@timestamp": {
            "gte": "2020-03-20 08:00:00",
            "lte": "2020-03-27 08:00:00"
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "range": {
      "date_range": {
        "field": "date",
        "format": "8yyyy-MM-dd",
        "ranges": [
          {
            "from": "2019-03-20",
            "to": "2019-03-27",
            "key": "last_years_week" 
          },
          {
            "from": "2020-03-20",
            "to": "2020-03-27",
            "key": "this_years_week"
          }
        ],
        "keyed": true
      }
    }
  }
}

聚合 结果即将出现,但它们不包含我要查找的数据。返回结果之一:

{
    "_index" : "sample-data_2020_03_26",
    "_type" : "_doc",
    "_id" : "JyhcfWFFz0s1vwizjgxh",
    "_score" : 1.0,
    "_source" : {
        "@timestamp" : "2020-03-26 00:00:00",
        "name" : "TEST0001",
        "count" : "150",
        "total" : 3000
    }
}
...
"aggregations" : {
    "range" : {
      "buckets" : {
        "last_years_week" : {
          "from" : 1.55304E12,
          "from_as_string" : "2019-03-20",
          "to" : 1.5536448E12,
          "to_as_string" : "2019-03-27",
          "doc_count" : 0
        },
        "this_years_week" : {
          "from" : 1.5846624E12,
          "from_as_string" : "2020-03-20",
          "to" : 1.5852672E12,
          "to_as_string" : "2020-03-27",
          "doc_count" : 0
        }
      }
    }
  }

我的问题是:使用 ElasticSearch 查询不同年份的两个日期之间的数据的有效方法是什么,以便可以使用它们来比较数字?

如果您能为我指明正确的方向,我很乐意阅读更多关于对我而言复杂的 ElasticSearch 查询的信息。

谢谢!

不发布带有 Elasticsearch 查询的工作解决方案,但正如问题评论中所讨论的,以答案的形式总结它,其中包含一些有用的链接。

Range queries on date fields are very useful to quickly search between date ranges, also supports various math operations on date fields.

aggregation on date range 也很有用 此聚合与正常范围聚合之间的主要区别在于,从和到值可以用日期数学表达式表示,如果您想在日期范围内进行聚合并且它支持如下所述的数据数学格式,则很有用: