查询语句如下
{
"size": 0,
"query": {
"range": {
"datatime": {
"gte": "now-7d",
"lte": "now"
}
}
},
"aggs": {
"group_by": {
"terms": {
"script": {
"lang": "painless",
"source":"doc['datatype.keyword'].value + ' ' doc['uname.keyword'].value"
},
"size": 50
}
}
}
}
报错信息如下"reason": {
"type": "general_script_exception",
"reason": "Failed to compile inline script [doc['datatype.keyword'].value + ' ' doc['uname.keyword'].value] using lang [painless]",
"caused_by": {
"type": "circuit_breaking_exception",
"reason": "[script] Too many dynamic script compilations within one minute, max: [15/min]; please use on-disk, indexed, or scripts with parameters instead; this limit can be changed by the [script.max_compilations_per_minute] setting",
"bytes_wanted": 0,
"bytes_limit": 0
}
}
1.报错信息我也可以看懂,就是配置一个参数,我想请教的是这个报错的dsl想干什么,可行性怎么样?
5 个回复
kennywu76 - Wood
赞同来自: laoyang360 、rochy 、ghnjk
文档参考: https://www.elastic.co/guide/e ... .html
kennywu76 - Wood
赞同来自: elasticStack
通过参数调整提高compile的上限需要谨慎,如果是存在太多的动态script, 频繁的compile可能带来太多压力。最好搞清楚为啥短时间会有这么多的script需要compile,是否有script的参数是生成查询的时候动态传入的? 如果是有参数动态传入,需要将动态部分放到params里去,保证script本身不会随着查询不同而变化,这样只会第一次执行的时候compile一次缓存起来。
rochy - rochy_he
赞同来自:
1. 同时对多个字段进行 term 聚合,然后编写程序将各个字段的聚合结果进行合并;
2. 使用 copy_to 属性,将多个字段合并到一个字段,然后针对这个字段进行 term 聚合。
ghnjk
赞同来自:
elasticStack - 90后it大数据男
赞同来自: