现在我的聚合是5分钟的日期直方图聚合,然后每5分钟对结果求和。

现在我的DSL类似于:

{
  "size": 0,
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "time": {
              "gt": "2020-03-31 11:30:00",
              "lt": "2020-03-31 13:00:00"
            }
          }
        },
        {
          "term": {
            "domain": "s3plus-shon.meituan.net"
          }
        }
      ]
    }
  },
  "aggs": {
    "flux_stats": {
      "date_histogram": {
        "field": "time",
        "interval": "5m",
        "format": "yyyy-MM-dd HH:mm:ss"
      },
      "aggs": {
        "flux": {
          "sum": {
            "field": "visit_flux"
          }
        }
      }
    }
  }
}

但是我想再次对结果进行日期直方图子聚合,该间隔为30分钟,并且需要每30分钟查找一次最大值,该怎么办?

最佳答案

您可以这样进行:首先设置30m的间隔,并获取每个30m周期的最大值,然后使用5m的子间隔加上5m周期的总和。

{
  "size": 0,
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "time": {
              "gt": "2020-03-31 11:30:00",
              "lt": "2020-03-31 13:00:00"
            }
          }
        },
        {
          "term": {
            "domain": "s3plus-shon.meituan.net"
          }
        }
      ]
    }
  },
  "aggs": {
    "flux_stats": {
      "date_histogram": {
        "field": "time",
        "interval": "30m",
        "format": "yyyy-MM-dd HH:mm:ss"
      },
      "aggs": {
        "flux": {
          "max": {
            "field": "visit_flux"
          }
        },
        "flux_stats": {
          "date_histogram": {
            "field": "time",
            "interval": "5m",
            "format": "yyyy-MM-dd HH:mm:ss"
          },
          "aggs": {
            "flux": {
              "sum": {
                "field": "visit_flux"
              }
            }
          }
        }
      }
    }
  }
}

关于elasticsearch - 日期直方图汇总后如何再次执行日期直方图?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60982745/

10-10 03:24