2016-07-31 11 views
1

私は集計内でscripted_metricを使いたいと思います。私はスクリプト内にいくつかのパラメトリックな値を設定しています。これらのクエリごとに値を設定したいのですが、このクエリを作成することは可能ですか?私は私のパラメータ値は、どのように私の目的のために、この凝集を変更するためにしているelasticsearchにparametric 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

あなたは、私がこれを自分自身を試してみてください、しかしとき「のparams」属性を追加し、私はこのエラーを得たクエリを実行するグ​​ローバル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

を指定することによって、それを行うことができます。 " "" type ":" script_exception "、 " reason: "インラインスクリプト[_agg ['maximum'] = []]を使用して実行できませんでしたlang [groovy]"、 "causes_by":{ "タイプ: "missing_property_exception"、 "reason": "このプロパティはありません:クラスの_agg: 61d7231114f6331ff30ad062a76adc50bd85e778 " } } –

+0

" params "属性がないと正しく動作します。 –

+0

どのESのバージョンがありますか?集計で[動的スクリプトを有効にする](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html#enable-dynamic-scripting)しましたか? – Val

関連する問題