利用solr的 DataImportHandler从mysql数据库建立索引

文章地址:http://quentinxxz.iteye.com/blog/2100619

 

本文所有实验在solr4.4上进行

 quickStart 参考 http://wiki.apache.org/solr/DIHQuickStart

步骤1: 首先修改solrconfig.xml 加往上DataImportHandler的配置
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
  <str name="config">data-config.xml</str>
</lst>
</requestHandler>
 
步骤2:配置solr服务器时一般报这个错org.apache.solr.common.SolrException: RequestHandler init failure或java.lang.ClassNotFoundException: org.apache.solr.handler.dataimport.DataImportHandler异常。原因是找不到solr-dataimporthandler-4.4.0.jar这个jar包,默认不在solr.war包里,在下载包的dist目录下
我的做法是直接
solr-dataimporthandler-4.4.0.jar 与solr-dataimporthandler-extra-4.4.0.jar 两个jar包放入 solr-webapp\webapp\WEB-INF\lib目录
mysql-connector-java-5.1.31.jar 也要放入该目录下。
当然也可以利用solrconfig.xml中的lib标签进行配置 
<lib ...... />
 
步骤3: 新建data-config.xml 文件,到conf目录下。示例如下
<dataConfig>
  <dataSource type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://199.xxx.xxx.xxx/quentinxxz_com"
              user="qqq"
              password="qqq"/>
  <document>
    <entity name="product"
            query="select id, price,modify_time from tts_product">
       <field column="price" name="tts_price"/>
       <field column="modify_time" name="tts_modify_time"/>
    </entity>
  </document>
</dataConfig>
 
 
步骤4:再在schema.xml中加入field
    <field name="tts_price" type="int" indexed="true" stored="true" />     
     <field name="tts_modify_time" type="date" indexed="true" stored="true" />      
 
步骤5: 访问 http://solr-host:port/solr/dataimport?command=full-import  进行一步全量索引。默认情况下,索引先被全部清除。如果你不想清除可加入参数clean=false.   http://solr-host:port/solr/dataimport?command=full-import&clean=false
 
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">35</int>
</lst>
<lst name="initArgs">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</lst>
<str name="command">full-import</str>
<str name="status">idle</str>
<str name="importResponse"/>
<lst name="statusMessages"/>
<str name="WARNING">
This response format is experimental. It is likely to change in the future.
</str>
</response>
 
当然也可能通过web ui界面进行索引操作