更新了问题
在我的查询中,我按日期汇总,然后汇总传感器名称。可以计算嵌套聚合与父存储桶的文档总数(或任何其他聚合)的比率吗?示例查询:
{
"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;。这对我来说没有答案,因为我必须为每个传感器/时间组合生成数以万计的零值文档,以使平均比率合适。
有关于此的任何想法吗?
答案 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"
}
}
这只是一个例子。