问题
SolrWriter Error creating document : SolrInputDocument(fields) 跟字段相关的值不对应
最起初我更改了数据库字段类型
字段用的是tinyint类型才发现Solr中没有这个类型
!!!上图所示,Solr所支持的数据类型!!!
后面还有一些类似text_*为前缀的数据类型,都是默认自带的分词器类型(例如下载的IK中文分词器),这里不在强调!!
解决办法两种
在url后面加上参数
&serverTimezone=UTC&tinyInt1isBit=false
注意要给&符号转义…
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/nsi_database?useSSL=false&serverTimezone=UTC&tinyInt1isBit=false"
user="root"
password="123456"/>
<document>
<entity name="nsi_post_category_item" query="SELECT * FROM `nsi_post_category_item` WHERE is_check = 1">
<field column="item_id" name="itemId"/>
<field column="title" name="title"/>
<field column="summary_desc" name="summaryDesc"/>
<field column="content" name="content"/>
<field column="post_type" name="postType"/>
<field column="post_icon" name="postIcon"/>
<field column="comment_num" name="commentNum"/>
<field column="share_num" name="shareNum"/>
<field column="watch_num" name="watchNum"/>
<field column="collect_num" name="collectNum"/>
<field column="tag" name="tag"/>
<field column="open_id" name="openId"/>
<field column="avatar" name="avatar"/>
<field column="nick_name" name="nickName"/>
<field column="is_check" name="isCheck"/>
</entity>
</document>
</dataConfig>
分析:
- tinyInt1isBit默认参数是true,并且Mysql的tinyint类型存储长度为1,Solr会把这个字段的类型转换为Boolean类型
- 设置为false会把tinyint的数据转换为Integer类型,也就是对应Solr中的pint类型,这样就可以导入Solr索引库里
- 避免tinyint字段类型存储数字格式长度为1,tinyint(1) 在Java中也会被默认转换成True/False
- tinyInt1isBit这个参数在使用时注意大小写
不使用tinyint
不使用tinyint改用int类型
- 修改你的core的 conf/managed-schema.xml配置文件
- 将mysql属性和Solr里面的字段类型对应上
- varchar对应的就是string,也可以是对应分词器类型text_ik
- int对应的pint或者plong
最后一步
重启Solr,查看Logging
红线的位置通常都会打印出错误的日志,或者一些同步数据时候的异常信息
Reload一下
当你更改了配置文件,或者修改了Mysql中要同步的数据类型或字段名,再或者往索引库中添加了新的数据时,记得Reload一下能解决很多问题
注意有多个Core的时候,要选择你要更改的Core