如何在弹性聚合中检索时间戳以及最小值

时间:2017-12-04 17:40:51

标签: elasticsearch bucket elasticsearch-aggregation

我正在对弹性数据集执行聚合查询 我想在一个时间跨度内检索最大值和最小值 我用

实现了这个目标
"aggs": {
    "DateRangeFilter": {
      "filter": {
        "range": {
          "@timestamp": {
            "gte": "2015-10-16T11:13:17.000",
            "lte": "2015-10-16T12:29:47.000"
          }
        }
      },
      "aggs": {
        "min_chan4": {
          "min": {
            "field": "ch_004"
          }
        },
        "max_chan4": {
          "max": {
            "field": "ch_004"
          }
}

这给了我:

"DateRangeFilter": {
    "doc_count": 153,
    "min_chan4": {
      "value": 0.7463656663894653
    },
    "max_chan4": {
      "value": 5.170884132385254
    }

这很棒。

我还需要检索每一个发生的 时间 我的文件看起来像这样:

    "_source": {
      "GroupId": "blahblah",
      "@timestamp": "2015-10-14T12:41:30Z",
      "ch_004": 1.5608633995056154
    }

所以我希望不仅可以检索给定日期范围内的最小值和最大值,还可以检索记录最小值或最大值的时间(@timestamp)

e.g。最小值minX发生在时间t1,最大值maxX发生在时间t2

1 个答案:

答案 0 :(得分:1)

您可以使用Top Hits Aggregation来实现它。示例可以找到here

{
  "aggs": {
    "DateRangeFilter": {
      "filter": {
        "range": {
          "@timestamp": {
            "gte": "2015-10-16T11:13:17.000",
            "lte": "2015-10-16T12:29:47.000"
          }
        }
      },
      "aggs": {
        "ch_004_min": {
          "top_hits": {
            "size": 1,
            "sort": [
              {
                "timestamp": {
                  "order": "asc"
                }
              }
            ]
          }
        },
        "ch_004_max": {
          "top_hits": {
            "size": 1,
            "sort": [
              {
                "timestamp": {
                  "order": "desc"
                }
              }
            ]
          }
        }
      }
    }
  }
}