问题:
由于使用DataImport从Mysql数据库中建立solr索引,每次查的的Entity中的id属性会有重复,A表,B表,两个表里面的id都是自增长,在创建索引的时候,先创建A表import,查询数据正常,再把B表import,结果id相同的数据覆盖了A表的数据。如下面所示:
思路:
由于在schema.xml中<unique>id<unique>导致的,查看官方文档和资料,如下步骤:
文档 : http://wiki.apache.org/solr/UniqueKey
具体配置如下:
一、配置schema.xml文件
1、添加fieldType
- <types>
- <!-- other field types -->
- <fieldType name="uuid" class="solr.UUIDField" indexed="true" />
- </types>
2、添加主键id字段配置(注释或者删除原来的id字段配置,切记)
- <field name="id" type="uuid" indexed="true" stored="true" required="true" multiValued="false" />
二、配置solrconfig.xml文件
1、注释掉以下的配置,原因及可能产出的异常参考:https://issues.apache.org/jira/browse/SOLR-3398
出现异常:
- <searchComponent name="elevator" class="solr.QueryElevationComponent" >
- <str name="queryFieldType">string</str>
- <str name="config-file">elevate.xml</str>
- </searchComponent>
- <updateRequestProcessorChain name="uuid">
- <processor class="solr.UUIDUpdateProcessorFactory">
- <str name="fieldName">id</str>
- </processor>
- <processor class="solr.RunUpdateProcessorFactory" />
- </updateRequestProcessorChain>
- <requestHandler name="/update" class="solr.UpdateRequestHandler">
- <!-- See below for information on defining
- updateRequestProcessorChains that can be used by name
- on each Update Request
- -->
- <!--
- <lst name="defaults">
- <str name="update.chain">dedupe</str>
- </lst>
- -->
- <lst name="defaults">
- <str name="update.chain">uuid</str>
- </lst>
- </requestHandler>
最后重启tomcat,重新import,在tomcat中的日志发现异常:
问题原因:出现以上情况很有可能是你设置了id为自动生成的UUID类型,但是你在入索引时仍然给id赋值了。
解决方案:找到入索引的程序,注释掉给id赋值的代码即可。此外,如果在启动时报以上错误,应该检查索引里面是否有索引数据,把之前索引清空。