首页 > 代码库 > solr全量索引

solr全量索引

Solr DIH(Data Import Handler)组件的实现类为org.apache.solr.handler.dataimport.DataImportHandler,在Solr的solrconfig.xml中配置两个handler,配置分别说明如下:

solrconfig.xml配置如下:

 

[java] view plain copy
 
 技术分享技术分享
  1. <requestHandler name="/dataimport"  
  2.      class="org.apache.solr.handler.dataimport.DataImportHandler">  
  3.      <lst name="defaults">  
  4.           <str name="config">data-config.xml</str>  
  5.      </lst>  
  6. </requestHandler>  

 

 

data-config.xml

 

[java] view plain copy
 
  1.  <dataConfig>  
  2.     <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"  
  3.         url="jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull"  
  4.         user="root" password="shyh"/>  
  5.     <document name="st_data">  
  6.         <entity name="solrtext" pk="id"  
  7.                 query="select * from solrtext limit ${dataimporter.request.length} offset ${dataimporter.request.offset}"  
  8.                 transformer="RegexTransformer">  
  9.             <field column="id" name="id" />  
  10.             <field column="url" name="url" />  
  11.             <field column="title" name="title" />  
  12.             <field column="author" name="author" />  
  13.         <field column="addon" name="addon" />  
  14.         <field column="path" name="path" />  
  15.         </entity>  
  16.     </document>  
  17. </dataConfig>  

 

说明:column为数据库字段名,name为schema.xml中对应的字段名

 

schmea.xml增加域

 

[java] view plain copy
 
  1. <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />   
  2. <field name="url" type="text_general" indexed="true" stored="true" />  
  3. <field name="title" type="text_general" indexed="true" stored="true"/>  
  4. <field name="author" type="text_general" indexed="true" stored="true"/>  
  5. <field name="addon" type="string" indexed="true" stored="true"/>  
  6.  <field name="path" type="string" indexed="false" stored="true"/>  

 

 

 

上面主要是通过内置变量 “${dataimporter.request.length}”和 “${dataimporter.request.offset}”来设置一个批次索引的数据表记录数,请求的URL示例如下:

http://localhost:8080/solr/dataimport?command=full-import&commit=true&clean=false&offset=1000000&length=100000

也可以直接进入solr的Dataimport页面导入:技术分享

上面表示,对数据表中id范围为[10000000, 1100000]的记录进行索引,因为数据表可能达到千万记录数,而且线上有业务在操作数据库,所以要选择分批进行索引。

如果数据量小可以直接全量导入不需分批:

 

[java] view plain copy
 
 技术分享技术分享
  1. <pre name="code" class="java"> <dataConfig>  
  2.     <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"  
  3.         url="jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull"  
  4.         user="root" password="shyh"/>  
  5.     <document name="st_data">  
  6.         <entity name="solrtext" pk="id"  
  7.                 query="select * from solrtext"  
  8.                 transformer="RegexTransformer">  
  9.             <field column="id" name="id" />  
  10.             <field column="url" name="url" />  
  11.             <field column="title" name="title" />  
  12.             <field column="author" name="author" />  
  13.         <field column="addon" name="addon" />  
  14.         <field column="path" name="path" />  
  15.         </entity>  
  16.     </document>  
  17. </dataConfig>  





注:执行导入操作时需要在webapps的solr项目的lib目录中加入数据库的驱动包以及solr-dataimporthandler-4.5.1.jar和solr-dataimporthandler-extras-4.5.1.jar这两个jar包(后两个jar包位于solr的解压包的dist目录)

solr全量索引