这是我第一次尝试一个无痛的脚本,但是几乎每个例子都使用一个“state”对象,这在我的版本中是不可用的。
即
"aggs": {
"terms": {
"scripted_metric": {
"init_script": "state.id_map = [:]; state.sum = 0.0;",
"map_script": """
def id = doc['record_id.ID'].value;
if (!state.id_map.containsKey(id)) {
state.id_map[id] = true;
state.sum += doc['VAL'].value;
}
""",
"combine_script": """
def sum = state.sum;
def stats = [:];
stats.sum = sum;
return stats
""",
"reduce_script": "return states"
}
}
}
结果:未定义变量[状态]。
省略它也没有帮助。
"init_script": "Map id_map = new HashMap(); double sum = 0.0;",
"map_script": """
def id = doc['record_id.ID'].value;
if (!id_map.containsKey(id)) {
id_map[id] = true;
sum += doc['VAL'].value;
}
""",
结果是:“变量[id\u map]未定义。”在map\u脚本部分
早期版本的替代方法是什么?
1条答案
按热度按时间5jvtdoz21#
上面的脚本在版本6.4以后的版本中可以正常工作。
因为您运行的是es 5.x,所以需要稍微更改一下语法:
替换
state
由params._agg
替换states
由params._aggs
这样地: