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

时间:2014-11-21 15:09:41

标签: elasticsearch metrics aggregator

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

1 个答案:

答案 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;"

这假设您事先知道您的条款(事件名称)。您还可以过滤相关事件。

希望这会有所帮助。