在做多表的联合查询时,由于我数据库中表的id有重复,所以在查询结果的时候发生了索引覆盖的事。然后用uuid自动生成这个唯一的ID解决这个问题。(防止id被覆盖)
1.修改schema.xml文件的配置
添加fieldType
<fieldType name="uuid" class="solr.UUIDField" indexed="true" />
<fieldType name="uuid" class="solr.UUIDField" indexed="true" />
添加uuid字段配置
<field name="uuid" type="uuid" indexed="true" stored="true" required="true"/>或者在原来的id字段的基础上进行修改
将uuid设置uniqueKey
<uniqueKey>uuid</uniqueKey>
2.修改solrconfig.xml的配置
在数据导入dataimport中添加uuid的配置
将<str name="update.chain">uuid</str>添加到数据导入的部分,结果如下:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
<str name="update.chain">uuid</str>
</lst>
</requestHandler>
添加一个updateRequestProcessorChain配置
<updateRequestProcessorChain name="uuid">
<processor class="solr.UUIDUpdateProcessorFactory">
<str name="fieldName">uuid</str>
</processor>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
注释掉以下的配置
<searchComponent name="elevator" class="solr.QueryElevationComponent" >
<!-- pick a fieldType to analyze queries -->
<str name="queryFieldType">string</str>
<str name="config-file">elevate.xml</str>
</searchComponent>