可以在elasticsearch中计算“总和”和“平均数”吗?

可以在elasticsearch中计算“总和”和“平均数”吗?,第1张

可以在elasticsearch中计算“总和”和“平均数”吗?

它不适用于

terms
aggs。这是使用无痛脚本的可能方式:

编制索引-您的实际映射可能与生成的默认映射不同(尤其是上的

.keyword
部分
rec_id
):

POST _bulk{"index":{"_index":"uniques","_type":"_doc"}}{"record_id":"100","cost":42}{"index":{"_index":"uniques","_type":"_doc"}}{"record_id":"200","cost":67}{"index":{"_index":"uniques","_type":"_doc"}}{"record_id":"200","cost":67}{"index":{"_index":"uniques","_type":"_doc"}}{"record_id":"200","cost":67}{"index":{"_index":"uniques","_type":"_doc"}}{"record_id":"400","cost":11}{"index":{"_index":"uniques","_type":"_doc"}}{"record_id":"400","cost":11}{"index":{"_index":"uniques","_type":"_doc"}}{"record_id":"500","cost":10}{"index":{"_index":"uniques","_type":"_doc"}}{"record_id":"600","cost":99}

然后汇总

GET uniques/_search{  "size": 0,  "aggs": {    "terms": {      "scripted_metric": {        "init_script": "state.id_map = [:]; state.sum = 0.0; state.elem_count = 0.0;",        "map_script": """          def id = doc['record_id.keyword'].value;          if (!state.id_map.containsKey(id)) { state.id_map[id] = true; state.elem_count++; state.sum += doc['cost'].value;          }        """,        "combine_script": """ def sum = state.sum; def avg = sum / state.elem_count; def stats = [:]; stats.sum = sum; stats.avg = avg; return stats        """,        "reduce_script": "return states"      }    }  }}

并屈服

..."aggregations" : {    "terms" : {      "value" : [        {          "avg" : 45.8,          "sum" : 229.0        }      ]    }  }


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存