Elasticsearch - 计算嵌套聚合相对于父存储桶的百分比

sta*_*max 5 aggregation bucket elasticsearch date-histogram

更新的问题

在我的查询中,我先聚合日期,然后聚合传感器名称。是否可以根据父存储桶的嵌套聚合和文档总数(或任何其他聚合)计算比率?查询示例:

{
  "size": 0,
  "aggs": {
    "over_time": {
      "aggs": {
        "by_date": {
          "date_histogram": {
            "field": "date",
            "interval": "1d",
            "min_doc_count": 0
          },
          "aggs": {
            "measure_count": {
              "cardinality": {
                "field": "date"
              }
            },
            "all_count": {
              "value_count": {
                "field": "name"
              }
            },
            "by_name": {
              "terms": {
                "field": "name",
                "size": 0
              },
              "aggs": {
                "count_by_name": {
                  "value_count": {
                    "field": "name"
                  }
                },
                "my ratio": count_by_name / all_count * 100 <-- How to do that?
              }
            }
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个自定义指标,它可以给出count_by_name / all_count * 100的比率。这在 ES 中可能吗,还是我必须在客户端上计算?这对我来说似乎很简单,但我还没有找到方法。

旧帖子:

有没有办法让 Elasticsearch 在计算存储桶的平均值时考虑文档总数(或任何其他指标)?

示例:我有大约 100000 个传感器,它们在不同时间生成事件。每个事件都被索引为具有时间戳和值的文档。

当我想要计算值和日期直方图的比率,并且某些传感器仅一次生成值时,我希望 Elasticsearch 将我的传感器不存在的值(文档)视为 0 而不是 null。因此,当按天聚合且传感器仅在晚上 10 点 (3) 和晚上 11 点 (5) 生成两个值时,当天的聚合应为 (3+5)/24,或正式的:SUM(VALUE)/24。

相反,Elasticsearch 计算平均值的方式类似于 (3+5)/2,这在我的例子中是不正确的。

Github 上曾经有一个票证https://github.com/elastic/elasticsearch/issues/9745,但答案是“在你的应用程序中处理它”。这对我来说不是答案,因为我必须为每个传感器/时间组合生成无数的零值文档才能获得正确的平均比率。

对此有什么想法吗?

Vin*_*han 0

如果是这种情况,只需从应用程序端将结果除以 24。并且当粒度改变时,相应地改变该值。每天的工作时间是固定的......