2016-07-31 479 views
1

我想在聚合中使用scripted_metric。我在我的脚本中有一些参数值,我希望为每个查询设置这些参数值,可以根据需要创建此查询吗? 下面就是我在寻找在elasticsearch中创建参数化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;" 
     } 
    } 
    } 

参数1和参数是我的参数值,如何改变这种聚集我的目的一个例子吗?

TNX :)

回答

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;" 
     } 
    } 
    } 
+0

我试试这个自己做,但是当添加“PARAMS”属性,并运行我得到这个错误的查询:“原因“:{ ”type“:”script_exception“, ”reason“:”无法使用lang [groovy]运行内嵌脚本[_agg ['maximum'] = []]“, ”caused_by“:{ ”键入“:”missing_property_exception“, ”reason“:”没有这样的属性:_agg for class: 61d7231114f6331ff30ad062a76adc50bd85e778“ } } –

+0

没有”参数“属性它的工作正常和正确 –

+0

你有哪个版本的ES?聚合中是否有[启用动态脚本](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html#enable-dynamic-scripting)? – Val