Elasticsearch - 计算嵌套聚合相对于父存储桶的百分比
Posted
技术标签:
【中文标题】Elasticsearch - 计算嵌套聚合相对于父存储桶的百分比【英文标题】:Elasticsearch - calculate percentage in nested aggregations in relation to parent bucket 【发布时间】:2016-02-06 21:11:07 【问题描述】:更新问题
在我的查询中,我先聚合日期,然后再聚合传感器名称。是否可以从嵌套聚合和父存储桶的文档总数(或任何其他聚合)计算比率?示例查询:
"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 上有一张票,但答案是“在你的应用程序中处理它”。这对我来说没有答案,因为我必须为每个传感器/时间组合生成无数个零值文档才能获得正确的平均比率。
对此有何想法?
【问题讨论】:
您能否提供一个示例文档和您发送的聚合请求 我更新了问题并添加了示例查询 【参考方案1】:如果是这种情况,只需从应用程序端将结果除以 24。当粒度发生变化时,相应地更改此值。每天的小时数是固定的......
【讨论】:
每个文档都有必填字段,这不是问题。我的问题是计算嵌套聚合与其父级之间的比率。【参考方案2】:您可以使用 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
【讨论】:
@static-max 我的回答对你有帮助吗?如果是这样,请不要忘记验证它以上是关于Elasticsearch - 计算嵌套聚合相对于父存储桶的百分比的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch_05_ES的嵌套聚合,下钻分析,聚合分析
ElasticSearch_04_ES的嵌套聚合,下钻分析,聚合分析
ElasticSearch_05_ES的嵌套聚合,下钻分析,聚合分析