包含 Elasticsearch 中子术语聚合器数据的脚本



我想计算 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;"

这假定您提前知道您的术语(事件名称)。您还可以筛选相关事件。

希望这有帮助。

最新更新