我想计算 Elasticsearch 中术语聚合器计数之间的倾倒百分位数。
我的查询 :
{
"query" : {
"match_all" : {}
},
"size" : 0,
"aggs": {
"eventName" : {
"terms" : { "field" : "json.eventName" }
}
}
}
结果聚合器:
"aggregations": {
"eventName": {
"doc_count_error_upper_bound": 0,
"buckets": [
{
"key": "term1",
"doc_count": 30235
},
{
"key": "term2",
"doc_count": 30216
},
{
"key": "term3",
"doc_count": 22177
},
{
"key": "term4",
"doc_count": 17173
}
]
}
}
我想要"term1"和"term4"之间的这个指标示例:56%
我认为scripted_metric
可以提供帮助。
看看我对这个问题的不同回答。
在您的情况下,您可以计算这两个术语,然后返回 term4Cnt/term1Cnt。粗略估计您需要什么:
"init_script": "_agg.term1Cnt = 0; _agg.term4Cnt = 0;",
"map_script": "if (doc.json.eventName == "term1") {
_agg.term1Cnt += 1;
} else if (doc.json.eventName == "term4") {
_agg.term4Cnt += 1;",
}"
"reduce_script": "term1Cnt = 0; term4Cnt = 0;
for (agg in _aggs) {
term1Cnt += agg.term1Cnt;
term4Cnt += agg.term4Cnt;
};
return term4Cnt / term4Cnt;"
这假定您提前知道您的术语(事件名称)。您还可以筛选相关事件。
希望这有帮助。