在Solr中,每一個索引,都要有一個唯一的ID,類似於關系型數據庫表中的主鍵。為了方便創建索引,需要配置自動生成的ID,即UUID。
一、配置schema.xml文件
添加uuid字段類型,修改字段id的類型。
<field name="id" type="uuid" indexed="true" stored="true" required="true" multiValued="false" /> <fieldType name="uuid" class="solr.UUIDField" indexed="true" />
二、配置solrconfig.xml文件
添加更新策略配置,調用Solr中的UUIDUpdateProcessorFactory生成全局唯一的UUID。
<updateRequestProcessorChain name="uuid"> <processor class="solr.UUIDUpdateProcessorFactory"> <str name="fieldName">id</str> </processor> <processor class="solr.LogUpdateProcessorFactory" /> <processor class="solr.DistributedUpdateProcessorFactory" /> <processor class="solr.RunUpdateProcessorFactory" /> </updateRequestProcessorChain>
配置requestHandler,保證dataimport和update操作都可以自動生成UUID。
<requestHandler name="/dataimport" class="solr.DataImportHandler"> <lst name="defaults"> <str name="config">tika-data-config.xml</str> <str name="update.chain">uuid</str> </lst> </requestHandler> <requestHandler name="/update" class="solr.UpdateRequestHandler"> <lst name="defaults"> <str name="update.chain">uuid</str> </lst> </requestHandler> <!-- for back compat with clients using /update/json and /update/csv --> <requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler"> <lst name="defaults"> <str name="stream.contentType">application/json</str> <str name="update.chain">uuid</str> </lst> </requestHandler> <requestHandler name="/update/csv" class="solr.CSVRequestHandler"> <lst name="defaults"> <str name="stream.contentType">application/csv</str> <str name="update.chain">uuid</str> </lst> </requestHandler> <requestHandler name="/update/extract" startup="lazy" class="solr.extraction.ExtractingRequestHandler" > <lst name="defaults"> <str name="xpath">/xhtml:html/xhtml:body/descendant:node()</str> <str name="capture">content</str> <str name="fmap.meta">attr_meta_</str> <str name="uprefix">attr_</str> <str name="lowernames">true</str> <str name="update.chain">uuid</str> </lst> </requestHandler>
經過以上配置之后,在進行索引的時候,就不需要指定ID了,Solr可自動生成ID字符串。