Solr4.40 如何配置使用UUID自动生成id值

  问题:

 由于使用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

[html]  view plain copy
  1. <types>  
  2.     <!-- other field types -->  
  3.     <fieldType name="uuid" class="solr.UUIDField" indexed="true" />  
  4. </types>  

2、添加主键id字段配置(注释或者删除原来的id字段配置,切记

[html]  view plain copy
  1. <field name="id" type="uuid" indexed="true" stored="true" required="true" multiValued="false" />  

二、配置solrconfig.xml文件

1、注释掉以下的配置,原因及可能产出的异常参考:https://issues.apache.org/jira/browse/SOLR-3398

出现异常:


[html]  view plain copy
  1. <searchComponent name="elevator" class="solr.QueryElevationComponent" >  
  2.   <str name="queryFieldType">string</str>  
  3.   <str name="config-file">elevate.xml</str>  
  4. </searchComponent>  
2、全局搜索updateRequestProcessorChain,添加一个updateRequestProcessorChain配置

[html]  view plain copy
  1. <updateRequestProcessorChain name="uuid">  
  2.     <processor class="solr.UUIDUpdateProcessorFactory">  
  3.         <str name="fieldName">id</str>  
  4.     </processor>  
  5.     <processor class="solr.RunUpdateProcessorFactory" />  
  6. </updateRequestProcessorChain>  
3、修改其中一个requestHandler配置, 注意:上一步是添加,而这里是修改,如果直接添加的话,那么就会重复配置,这样后面的配置会覆盖前面的配置,本人就是很不幸的被默认的配置覆盖了我添加的配置,当时够郁闷的!

[html]  view plain copy
  1. <requestHandler name="/update" class="solr.UpdateRequestHandler">  
  2.     <!-- See below for information on defining   
  3.          updateRequestProcessorChains that can be used by name   
  4.          on each Update Request  
  5.       -->  
  6.     <!--  
  7.        <lst name="defaults">  
  8.          <str name="update.chain">dedupe</str>  
  9.        </lst>  
  10.        -->  
  11.     <lst name="defaults">  
  12.         <str name="update.chain">uuid</str>  
  13.     </lst>  
  14.   </requestHandler>  

最后重启tomcat,重新import,在tomcat中的日志发现异常:


问题原因:出现以上情况很有可能是你设置了id为自动生成的UUID类型,但是你在入索引时仍然给id赋值了。

解决方案:找到入索引的程序,注释掉给id赋值的代码即可。此外,如果在启动时报以上错误,应该检查索引里面是否有索引数据,把之前索引清空。


转自:http://blog.csdn.net/keepthinking_/article/details/8501058

你可能感兴趣的:(Solr4.40 如何配置使用UUID自动生成id值)