Elasticsearch:可以处理聚合结果吗?

Elasticsearch:可以处理聚合结果吗?,第1张

Elasticsearch:可以处理聚合结果吗?

稍微复杂一点,但是在这里(由于这种类型的聚合,仅在1.4
中使用):

{  "query": {    "filtered": {      "query": {        "match_all": {}      },      "filter": {        "term": {          "serviceId": 1        }      }    }  },  "aggs": {    "executionTimes": {      "scripted_metric": {        "init_script": "_agg['values'] = new java.util.HashMap();",        "map_script": "if (_agg.values[doc['callerId'].value]==null) {_agg.values[doc['callerId'].value]=doc['duration'].value;} else {_agg.values[doc['callerId'].value].add(doc['duration'].value);}",        "combine_script":"someHashMap = new java.util.HashMap();for(x in _agg.values.keySet()) {value=_agg.values[x]; sum=0; for(y in value) {sum+=y}; someHashMap.put(x,sum)}; return someHashMap;",        "reduce_script": "finalArray = []; finalMap = new java.util.HashMap(); for(map in _aggs){for(x in map.keySet()){if(finalMap.containsKey(x)){value=finalMap.get(x);finalMap.put(x,value+map.get(x));} else {finalMap.put(x,map.get(x))}}}; finalAvgValue=0; finalMaxValue=-1; finalMinValue=-1; for(key in finalMap.keySet()){currentValue=finalMap.get(key);finalAvgValue+=currentValue; if(finalMinValue<0){finalMinValue=currentValue} else if(finalMinValue>currentValue){finalMinValue=currentValue}; if(currentValue>finalMaxValue) {finalMaxValue=currentValue}}; finalArray.add(finalMaxValue); finalArray.add(finalMinValue); finalArray.add(finalAvgValue/finalMap.size()); return finalArray",        "lang": "groovy"      }    }  }}

另外,我并不是说这是最好的方法,但我只能找到一种方法。另外,我并不是说解决方案处于最佳状态。可能会对其进行清理和改进。不过,我想证明这是可能的。但是请记住,它在1.4中可用。

该方法的基本思想是使用脚本来构建应包含所需信息的数据结构,并根据脚本化的度量汇总以不同的步骤进行计算。而且,仅对一个执行聚合

serviceId
。如果要对所有serviceId执行此 *** 作,我想您可能需要重新考虑一下脚本中的数据结构。

对于上面的查询以及您提供的确切数据,输出为:

{   "took": 3,   "timed_out": false,   "_shards": {      "total": 5,      "successful": 5,      "failed": 0   },   "hits": {      "total": 6,      "max_score": 0,      "hits": []   },   "aggregations": {      "executionTimes": {         "value": [ 1202, 1033, "1117.5"         ]      }   }}

根据中

value
的脚本,数组中值的顺序为[max,min,avg]
reduce_script



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4926432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存