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

ElasticSearch:基于聚合二次聚合统计各项目最新状态数量

解决方案:管道聚合实现状态统计

你当前的查询已经完成了按项目分组并获取最新状态的第一步,接下来通过管道聚合对这些状态做统计即可。用bucket_script提取每个项目的最新状态,再用terms管道聚合完成最终统计:

GET journaling*/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "DATETIME": {
              "gte": "2024/12/07 00:00:00.000",
              "lte": "2024/12/07 23:59:59.000"
            }
          }
        },
        {
          "match": {
            "ACCOUNT": "12345"
          }
        }
      ]
    }
  },
  "size": 0,
  "aggs": {
    "ProjectGroups": {
      "terms": {
        "field": "PROJECTID",
        "size": 10000 // 设置为足够大的值覆盖所有项目,避免遗漏
      },
      "aggs": {
        "LatestStatus": {
          "top_hits": {
            "size": 1,
            "_source": ["EVENTDESCRIPTION"],
            "sort": {
              "DATETIME": {
                "order": "desc"
              }
            }
          }
        },
        // 从top_hits结果中提取最新状态字段
        "CurrentStatus": {
          "bucket_script": {
            "buckets_path": {
              "status": "LatestStatus.hits.hits.0._source.EVENTDESCRIPTION"
            },
            "script": "params.status"
          }
        }
      }
    },
    // 统计各状态对应的项目数量
    "StatusCount": {
      "terms": {
        "field": "CurrentStatus",
        "size": 10 // 根据实际状态类型数量调整
      }
    }
  }
}

关键注意点

  • ProjectGroups的size必须大于等于项目总数,否则会因项目遗漏导致统计结果不准
  • 确保EVENTDESCRIPTION是keyword类型,若为text类型,需改用EVENTDESCRIPTION.keyword作为聚合字段
  • 日期范围已调整为匹配示例数据,实际使用时按需修改

后续按天聚合的实现思路

如果要生成跨日期的状态统计图表,只需在现有聚合外层嵌套date_histogram按天分组,再在每个日期分组内执行相同的项目状态统计逻辑:

GET journaling*/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "DATETIME": {
              "gte": "2024/12/01 00:00:00.000",
              "lte": "2024/12/07 23:59:59.000"
            }
          }
        },
        {
          "match": {
            "ACCOUNT": "12345"
          }
        }
      ]
    }
  },
  "size": 0,
  "aggs": {
    "DailyGroups": {
      "date_histogram": {
        "field": "DATETIME",
        "calendar_interval": "day",
        "format": "yyyy-MM-dd"
      },
      "aggs": {
        "ProjectGroups": {
          "terms": {
            "field": "PROJECTID",
            "size": 10000
          },
          "aggs": {
            "LatestStatus": {
              "top_hits": {
                "size": 1,
                "_source": ["EVENTDESCRIPTION"],
                "sort": {
                  "DATETIME": {
                    "order": "desc"
                  }
                }
              }
            },
            "CurrentStatus": {
              "bucket_script": {
                "buckets_path": {
                  "status": "LatestStatus.hits.hits.0._source.EVENTDESCRIPTION"
                },
                "script": "params.status"
              }
            }
          }
        },
        "DailyStatusCount": {
          "terms": {
            "field": "CurrentStatus",
            "size": 10
          }
        }
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:59:53