You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计date_histogram聚合中summary.severity的1、2级总数?

如何在Elasticsearch中按天、资产分组后统计指定Severity的数量?

我需要基于group_by_asset的summary.severity字段做聚合统计,具体要跟踪每个桶内severity值为1和2的数量(命名为how_many_ones、how_many_twos)。以下是我当前的Elasticsearch查询:

{
  "runtime_mappings": {
    // 自定义运行时字段
  },
  "aggs": {
    "histogram_data": {
      "date_histogram": {
        "field": "timestamp",
        "calendar_interval": "day",
        "extended_bounds": {
          "min": "2023-06-12T07:00:00.000Z",
          "max": "2024-06-11T19:11:32.532Z"
        }
      },
      "aggs": {
        "group_by_asset": {
          "multi_terms": {
            "terms": [
              { "field": "asset.id" },
              { "field": "summary.severity" }, // 目标统计字段
              { "field": "asset.name", "missing": "N/A" }
            ]
          }
        }
      }
    }
  },
  "query": {
    ...
  }
}

当前查询返回的结果按天拆分,示例如下:

{
  "group_by_asset": {
    "buckets": [
      {
        "key_as_string": "...",
        "key": ["123", 2, "BLT"], // 包含severity值的分组键
        "doc_count": 1
      }
    ],
    "sum_other_doc_count": 0,
    "doc_count_error_upper_bound": 0
  },
  "key_as_string": "2024-04-18T00:00:00.000Z",
  "key": 1713398400000,
  "doc_count": 1
},
{
  "group_by_asset": {
    ...
  }
}

尝试调整聚合结构但未成功,请问如何修改查询实现需求?


解决方案

你需要调整聚合层级:先按资产(asset.id+asset.name)分组,再在每个资产桶内用filters聚合分别统计severity=1和severity=2的文档数量。修改后的查询如下:

{
  "runtime_mappings": {
    // 自定义运行时字段
  },
  "aggs": {
    "histogram_data": {
      "date_histogram": {
        "field": "timestamp",
        "calendar_interval": "day",
        "extended_bounds": {
          "min": "2023-06-12T07:00:00.000Z",
          "max": "2024-06-11T19:11:32.532Z"
        }
      },
      "aggs": {
        "group_by_asset": {
          "multi_terms": {
            "terms": [
              { "field": "asset.id" },
              { "field": "asset.name", "missing": "N/A" }
            ]
          },
          "aggs": {
            "severity_stats": {
              "filters": {
                "filters": {
                  "how_many_ones": { "term": { "summary.severity": 1 } },
                  "how_many_twos": { "term": { "summary.severity": 2 } }
                }
              }
            }
          }
        }
      }
    }
  },
  "query": {
    ...
  }
}

调整说明

  1. 修改group_by_asset的multi_terms分组,去掉summary.severity,只保留资产维度(asset.id+asset.name),确保每个资产作为独立桶。
  2. 在资产桶内新增severity_stats的filters聚合,分别匹配summary.severity=1和summary.severity=2,直接统计对应数量。
  3. 返回结果中,每个天桶下的资产桶会包含severity_stats字段,其中how_many_ones和how_many_twos就是对应severity的文档数。

示例返回结构如下:

{
  "key_as_string": "2024-04-18T00:00:00.000Z",
  "key": 1713398400000,
  "doc_count": 5,
  "group_by_asset": {
    "buckets": [
      {
        "key_as_string": "123|BLT",
        "key": ["123", "BLT"],
        "doc_count": 3,
        "severity_stats": {
          "buckets": {
            "how_many_ones": { "doc_count": 1 },
            "how_many_twos": { "doc_count": 2 }
          }
        }
      }
    ]
  }
}

内容的提问来源于stack exchange,提问作者GustaMan9000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:07:03