Elasticsearch 6.4 索引时执行脚本报错

1、Es2.2.1升级升级6.4 脚本执行问题

今天在全量索引用户充值信息时,遇到如下问题,从头梳理一下:

原始code:

修改之后:

在第一遍调接口执行全量索引时:

报如下错误:

java.lang.IllegalArgumentException: failed to execute script

因为是升级到了6.4,es的eslaticsrarch.yml配置里面没有加一下参数:

网上搜了一下,也说是没有这几个参数导致的。所以就直接在6.4的配置文件中加了这几个参数。加完之后启动Es时,Es启动失败。后来将先修改了script,最初修改的是这样的:

与最终的相比较就查了四个params.这里先不解释。再去查日志,es日志显示如下错误:

其中,说Too many dynamic script compilations within, max: [75/5m],因为我们索引的数据量比较大,而且索引时使用的是批量索引,考虑有可能是这个原因导致的,随即在yml中配置了这个参数,先配成了script.max_compilations_rate:300/1m,重新启动,同样显示此错误。以为这个值太小,所以将值配成了20000/1m,这次果然没报相同错误,但是出现了新的错误如下:

说是变量没有被定义,但是我确实是定义了,未果,看源码:

这是源码中的一个例子,然后就想可能是参数结构错误:

参数改成这样还不行,又试了一下,将代码改成了上面贴的最终的,重启测试,一切正常。但是因为配置了script.max_compilations_rate,所以还是不确定到底是哪里引起了最原始的错误,然后将script.max_compilations_rate改成了默认的,启动测试,还是正常的。到这里才算搞明白,原来是script的参数结构不对导致的。

中间还出现了这个异常:

所以还一度认为是批量处理的问题,改成单条index依然没有效果。

总结:

(1)Es6.4和先前版本还是有很多区别的,版本不兼容的地方很多,这个script参数结构就是一个。

(2)在向Es的yml配置文件写参数时,:后面要加空格,否则会导致Es启动失败。


版权声明:本文为write0my0future原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。