我想计算Elasticsearch中术语聚合器计数之间的pourcentile。
我的查询:
{
"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%
答案 0 :(得分:0)
我认为scripted_metric
可以提供帮助。
请查看我对其他this问题的回答。
在您的情况下,您可以指望这两个术语,然后返回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;"
这假设您事先知道您的条款(事件名称)。您还可以过滤相关事件。
希望这会有所帮助。