ElasticSearch - 在一系列日期之间搜索以进行比较

标签 elasticsearch elasticsearch-aggregation

我是 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对于在日期范围之间快速搜索非常有用,还支持各种 math operations on date fields .

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

关于ElasticSearch - 在一系列日期之间搜索以进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60890571/

相关文章:

elasticsearch - 运行elasticsearch复合聚合时出现“未知的BaseAggregationBuilder [复合]错误”

elasticsearch - 为什么Elasticsearch术语存储桶大小会影响内部反向嵌套聚合的doc_count?

elasticsearch - Elasticsearch 5中的词云

java - ElasticSearch Java API "Should"数组

elasticsearch - 在Elasticsearch与父子关系中使用嵌套映射的优缺点是什么

elasticsearch - filebeat未在linux中启动,并且未打印任何日志以进行故障排除

elasticsearch - 如何在Kibana中的两个过滤器之间汇总数据?

python - 如何合并两个DSL查询以进行聚合和过滤

docker - 来自Docker镜像的Elasticsearch服务未连接到WebApp或Kibana

elasticsearch - 使用Elastic Search的自定义构面