顺便聊一下记一次logstash同步MySQL到es时tinyint类型字段被转为boolean类型的问题

一、先看报错

"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'"

ES索引里面status字段值

图为用户将字段类型改为 keyword 后的结果,起初ES索引status类型为 integer

二、分析原因

  1. 检查原始数据,是否统一为数值类型
  2. ES索引字段类型映射异常

以上怀疑的两点,均未发现任何异常,目标索引替换成一个新的索引名字后,依然报同样的错误。

于是乎,怀疑logstash同步MySQL的tinyint类型字段本身就存在异常,经过一番排查,终于找到了解决方案。

三、解决方案

# jdbc 连接串后面添加参数 tinyInt1isBit=false 即可

jdbc_connection_string => "jdbc:mysql://$URL/$DATABASE?tinyInt1isBit=false

加了该参数后status字段值

此时 status 类型为 long

正文完