Solr DIH(Data Import Handler)组件的实现类为org.apache.solr.handler.dataimport.DataImportHandler,在Solr的solrconfig.xml中配置两个handler,配置分别说明如下:
solrconfig.xml配置如下:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
<dataConfig> <dataSource name="jdbc" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull" user="root" password="shyh"/> <document name="st_data"> <entity name="solrtext" pk="id" query="select * from solrtext limit ${dataimporter.request.length} offset ${dataimporter.request.offset}" transformer="RegexTransformer"> <field column="id" name="id" /> <field column="url" name="url" /> <field column="title" name="title" /> <field column="author" name="author" /> <field column="addon" name="addon" /> <field column="path" name="path" /> </entity> </document> </dataConfig>
说明:column为数据库字段名,name为schema.xml中对应的字段名
schmea.xml增加域
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="url" type="text_general" indexed="true" stored="true" /> <field name="title" type="text_general" indexed="true" stored="true"/> <field name="author" type="text_general" indexed="true" stored="true"/> <field name="addon" type="string" indexed="true" stored="true"/> <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
上面表示,对数据表中id范围为[10000000, 1100000]的记录进行索引,因为数据表可能达到千万记录数,而且线上有业务在操作数据库,所以要选择分批进行索引。
如果数据量小可以直接全量导入不需分批:
<pre name="code" class="java"> <dataConfig> <dataSource name="jdbc" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull" user="root" password="shyh"/> <document name="st_data"> <entity name="solrtext" pk="id" query="select * from solrtext" transformer="RegexTransformer"> <field column="id" name="id" /> <field column="url" name="url" /> <field column="title" name="title" /> <field column="author" name="author" /> <field column="addon" name="addon" /> <field column="path" name="path" /> </entity> </document> </dataConfig>