尝试修复Elasticsearch中出现的“Too many dynamic script compilations”错误
· 发表评论背景
有个业务接口使用es template模板搜索,模板比较复杂。同时在代码中使用java的velocity模板引擎来解析填充搜索关键词。最早使用Elasticsearch 5没有出现动态编译报错,在升级到Elasticsearch 7.10.2版本后,会偶发出现超过动态编译数量限制的错误,如下:
{
"type": "circuit_breaking_exception",
"reason": "[script] Too many dynamic script compilations within, max: [75/5m];
please use indexed, or scripts with parameters instead;
this limit can be changed by the [script.context.template.max_compilations_rate] setting",
"bytes_wanted": 0,
"bytes_limit": 0,
"durability": "TRANSIENT"
}
Elasticsearch在执行查询时达到脚本编译限制,抛出circuit_breaking_exception错误,并且查询不会运行。这个错误通常是由于在短时间内编译了太多的动态脚本而导致的。需要优化代码以减少编译次数,或者增加编译次数的限制。可以尝试将动态脚本缓存起来,以便在需要时可以重复使用,从而减少编译次数。