问题:
Solr建索引时候可以从数据库导入数据,例如可以通过Solr DIH,也可以通过JDBC。Solr的唯一键设置导致一个问题:
假设Mysql数据库中有两张表t1和t2,两张表都有id字段。那么,t1和t2中的id很可能出现相同的情况。此时,如果在Solr中同时导入这两张表的数据,且Solr中将id设置为唯一键(即配置<uniqueKey>id</uniqueKey> ),那么,Solr新建的索引中会对id进行去重,后导入的数据将覆盖之前导入的且id相同的数据。
解决方法:
利用Solr自带的uuid方案。
步骤:
1. 新建一个id字段,FieldType设置为String,index=true,stored=true,multiValued=false。
在Solr的Web UI界面中进行设置,如下图(待补充)
2. 更新core以后,managed-schema.xml文件中会新增
<field name="id" type="string" indexed="true" stored="true"/>
3. 设置
<uniqueKey>id</uniqueKey>
4. 重载内核,导入数据后,Solr将以id为唯一键(格式为uuid格式),且不会因为数据库中id相同导致去重问题。
我仅仅在全量更新的方式下测试,下一步测试增量更新。
网友评论