【问题标题】:Script with data of sub terms aggregators in Elasticsearch包含 Elasticsearch 中子术语聚合器数据的脚本
【发布时间】:2014-12-19 17:44:12
【问题描述】:

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

【问题讨论】:

  • 不知道我的问题?

标签: elasticsearch metrics aggregator


【解决方案1】:

我认为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;"

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-09
    • 2021-06-06
    • 2021-06-06
    • 2015-11-06
    • 2015-01-21
    • 2017-10-27
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多