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

如何合并Elasticsearch聚合查询并在Kibana实现比值可视化

解决Elasticsearch合并查询并计算比值可视化的方案

一、合并查询计算每日比值的DSL实现

你可以通过单请求多过滤聚合+Bucket Script的方式,一次性在两个索引上完成统计并计算比值,不需要分开两次查询。以下是完整的查询DSL:

GET /my_target_0001,my_target_0002/_search
{
  "size": 0,  // 只返回聚合结果,不获取原始文档
  "aggs": {
    "daily_buckets": {
      "date_histogram": {
        "field": "lastModified",
        "calendar_interval": "day",
        "format": "yyyy-MM-dd"  // 按日期格式返回桶标签
      },
      "aggs": {
        // 统计my_target_0001中locked=true的每日数量
        "abc_per_day": {
          "filter": {
            "bool": {
              "must": [
                {"term": {"_index": "my_target_0001"}},
                {"term": {"locked": true}}
              ]
            }
          },
          "aggs": {
            "total": {"value_count": {"field": "_id"}}
          }
        },
        // 统计my_target_0002的每日总数量
        "xyz_per_day": {
          "filter": {
            "term": {"_index": "my_target_0002"}
          },
          "aggs": {
            "total": {"value_count": {"field": "_id"}}
          }
        },
        // 计算abc与xyz的比值,处理除数为0的情况
        "abc_xyz_ratio": {
          "bucket_script": {
            "buckets_path": {
              "abc": "abc_per_day.total",
              "xyz": "xyz_per_day.total"
            },
            "script": "params.xyz != 0 ? params.abc / params.xyz : 0"
          }
        }
      }
    }
  }
}

关键逻辑说明:

  • 同时查询两个索引:在请求路径中用逗号分隔my_target_0001,my_target_0002
  • 按天分桶:date_histogram的calendar_interval设为day,确保每日一个数据桶
  • 过滤统计:用filter聚合分别筛选两个索引的目标数据,再用value_count统计数量
  • 比值计算:bucket_script聚合引用两个子聚合的结果,通过Painless脚本计算比值,同时避免除以0的错误

二、在Kibana中构建比值直方图可视化

前置准备

确保你已经在Kibana的Stack Management > Index Patterns中创建了包含my_target_0001和my_target_0002的索引模式(如果还没创建,直接输入索引名前缀匹配即可)。

可视化步骤

  1. 进入Kibana的Visualize Library,点击Create visualization,选择Vertical Bar(或Line,根据偏好)作为可视化类型
  2. 选择之前创建的跨索引模式作为数据源
  3. 配置X轴:
    • 聚合类型选择Date Histogram
    • 字段选择lastModified
    • 间隔设置为Day
  4. 配置Y轴(核心步骤):
    • 聚合类型选择Bucket Script
    • 在Buckets Path区域添加两个变量:
      • 第一个变量命名为abc:点击Add Bucket,选择Filter聚合,过滤条件输入_index:my_target_0001 AND locked:true,聚合类型选Count
      • 第二个变量命名为xyz:点击Add Bucket,选择Filter聚合,过滤条件输入_index:my_target_0002,聚合类型选Count
    • 在Script输入框中写入比值计算逻辑:params.xyz == 0 ? 0 : params.abc / params.xyz
    • 可以在Format中设置数值格式(比如保留两位小数)
  5. 调整可视化细节:修改标题、X/Y轴标签,设置颜色等
  6. 点击Save保存可视化,之后可以添加到Dashboard中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:25:39