Press "Enter" to skip to content

Solr实战:Solr自动生成自增ID配置实践

Last updated on 2020-04-29

Solr基于Lucene的索引,而索引中的最基本的单元式Document,在Solr中,管理每一个Document(更新、删除、查询),基本都会用到对应的ID,类似关系数据表中的主键。但是,如果我希望Solr能够自动生成这个唯一的ID,有时候也省去了不少的工作,而只需要在Solr中进行配置即可。

下面,通过实例来说明,如何配置Solr支持的UUID。首先,示例的 managed-schema对应的表结构,如图所示:
注意:solr低版本的文件名叫schema.xml ,楼主使用的solr8.0

在Solr中配置生成唯一UUID,需要修改两个配置文件:

managed-schema
managed-schema文件的配置内容,增加如下类型配置(如上图):

<fieldType name="uuid" class="solr.UUIDField" indexed="true" />

再修改原有的ID字段的类型,如下所示(如上图):

<field name="id" type="uuid" multiValued="false" indexed="true" required="true" stored="true"/>

注意:还需要修改一行 ,这里需要将field name为_root_ 的字段与id的type设置一致,否则会报错 _root_ field must be defined using the exact same fieldType as the uniqueKey filed(**) ..
详细内容在此链接:https://blog.csdn.net/xinsuwang/article/details/84925767

<field name="_root_" type="uuid" docValues="false" indexed="true" stored="false"/>

这样还不够,还需要指定在更新索引的时候,使用这个更新策略,即配置一个requestHandler元素。
solrconfig.xml

配置solrconfig.xml文件,修改更新索引的requestHandler 配置,内容如下所示:

<requestHandler name="/update" class="solr.UpdateRequestHandler">
<lst name="defaults">
<str name="update.chain">dispup</str>
</lst>
</requestHandler>

上面的update.chain就是我们实际要指定的使用UUID进行更新的策略的配置,如下所示:

<updateRequestProcessorChain name="dispup">
<processor class="solr.UUIDUpdateProcessorFactory">
<str name="fieldName">id</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.DistributedUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>


经过上面两步配置,在进行索引的时候,就不需要指定Document所要求的ID了,完全有Solr自动生成这个ID字符串。

下面看看,我们配置后,生成的Document的信息,示例如下所示

 

文档借鉴自:https://www.aboutyun.com//forum.php/?mod=viewthread&tid=7743&extra=page%3D1&page=1 感谢分享

Leave a Reply

Your email address will not be published. Required fields are marked *