在elasticsearch中创建参数scripted_metric

时间:2016-07-31 08:00:10

标签: elasticsearch groovy

我想在聚合中使用scripted_metric。我的脚本中有一些参数值,我想为每个查询设置这些值,可以创建此查询吗? 下面是我正在寻找的一个例子

"aggs": {
    "testAgg": {
      "scripted_metric": {
        "init_script": "_agg['maximum'] = []",
        "map_script": "max = 0; for(tv in _source.tvs){ if(tv.att1>= param1 && tv.attr2 <= param2 && tv.att3 > max){max = tv.att3; }}; _agg.maximum.add(max);",
        "combine_script": "sum = 0; for (m in _agg.maximum) { sum += m }; return sum;",
        "reduce_script": "sum = 0; for (a in _aggs) { sum += a }; return sum;"
      }
    }
  }

param1和param2是我的参数值,如何为我的目的更改此聚合?

tnx:)

1 个答案:

答案 0 :(得分:1)

您可以通过指定全局params地图

来实现
"aggs": {
    "testAgg": {
      "scripted_metric": {
        "params": {
           "_agg": {},
           "param1": 10,
           "param2": 20
        },
        "init_script": "_agg['maximum'] = []",
        "map_script": "max = 0; for(tv in _source.tvs){ if(tv.att1>= param1 && tv.attr2 <= param2 && tv.att3 > max){max = tv.att3; }}; _agg.maximum.add(max);",
        "combine_script": "sum = 0; for (m in _agg.maximum) { sum += m }; return sum;",
        "reduce_script": "sum = 0; for (a in _aggs) { sum += a }; return sum;"
      }
    }
  }