Elasticsearch - 计算与父存储桶相关的嵌套聚合中的百分比

时间:2015-11-05 20:57:28

标签: elasticsearch aggregation bucket 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?
              }
            }
          }
        }
      }
    }
  }
}

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

旧帖子:

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

实施例: 我有100000个传感器可以在不同的时间生成事件。每个事件都被编入索引为具有时间戳和值的文档。

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

相反,Elasticsearch会计算平均值(3 + 5)/ 2,这在我的情况下是不正确的。

在Github https://github.com/elastic/elasticsearch/issues/9745上曾经有一张票,但答案是&#34;在你的应用程序中处理它&#34;。这对我来说没有答案,因为我必须为每个传感器/时间组合生成数以万计的零值文档,以使平均比率合适。

有关于此的任何想法吗?

2 个答案:

答案 0 :(得分:0)

如果是这种情况,只需将结果从应用程序端除以24即可。当粒度更改时,相应地更改此值。每天的小时数是固定的....

答案 1 :(得分:0)

您可以使用Bucket脚本聚合来执行所需的操作。

{
    "bucket_script": {
        "buckets_path": {
            "count_by_name": "count_by_name", 
            "all_count": "all_count"
        },
        "script": "count_by_name / all_count*100"
    }
}

这只是一个例子。

https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-aggregations-pipeline-bucket-script-aggregation.html