一、先看报错
代码语言:txt复制"reason"=>"failed to parse field [status] of type [integer] in document with id '469716694017769472'. Preview of field's value: 'true'"
"reason"=>"failed to parse field [status] of type [integer] in document with id '469717297049632768'. Preview of field's value: 'false'"
图为用户将字段类型改为 keyword 后的结果,起初ES索引status类型为 integer
二、分析原因
- 检查原始数据,是否统一为数值类型
- ES索引字段类型映射异常
以上怀疑的两点,均未发现任何异常,目标索引替换成一个新的索引名字后,依然报同样的错误。
于是乎,怀疑logstash同步MySQL的tinyint类型字段本身就存在异常,经过一番排查,终于找到了解决方案。
三、解决方案
代码语言:txt复制# jdbc 连接串后面添加参数 tinyInt1isBit=false 即可
jdbc_connection_string => "jdbc:mysql://$URL/$DATABASE?tinyInt1isBit=false
此时 status 类型为 long