更新的问题
在我的查询中,我按日期汇总,然后按传感器名称汇总。可以从嵌套聚合和父存储桶的文档总数(或任何其他聚合)计算比率吗?示例查询:
{
"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。
相反,Elasticsearch 会计算像 (3+5)/2 这样的平均值,这在我的情况下是不正确的。
Github 上曾经有一张票https://github.com/elastic/elasticsearch/issues/9745,但答案是“在你的应用程序中处理它”。这对我来说没有答案,因为我必须为每个传感器/时间组合生成无数个零值文档才能获得正确的平均比率。
对此有什么想法吗?