公司绝大部分的数据是存储在数据库中。假如有一天数据库已经很大了,公司决定将数据导入到索引中,以改善数据检索的效果,该怎么办呢?
Solr已经为我们准备好了这样的工具,那就是Data Import Handler。学习了这几天的solr,感觉solr的核心就是它的两个配置文件:schema.xml和solrconfig.xml。
还是需要提前说明一下,本文的操作都是:win7+tomcat6.0+solr 4.2.0 +mysql5.5
第一步:建立数据库表,并插入测试数据。
在test数据库中建立一张users表,表的结构如下:
往数据库表中插入一些数据:
第二步:准备相关的jar包。
由于在2013-4-18_solr学习之(三)_访问solr4.2的browse页面中我已经把相关的jar包导入了,这里只需要把mysql-connector-java- 5.1.13 -bin.jar包复制到
D:\xh_solr\tomcat-solr\solr\bin\contrib\dataimporthandler\lib文件夹下面。然后在solrconfig.xml中指明该jar包的位置即可。在solrconfig.xml中的相关配置如下:
<lib dir="D:/xh_solr/tomcat-solr/solr/bin/dist/" regex="solr-dataimporthandler-\d.*\.jar" />
<lib dir="D:/xh_solr/tomcat-solr/solr/bin/contrib/dataimporthandler/lib/" regex=".*\.jar" />
第三步:配置相应的requestHandler。
依然是在solrconfig.xml中加入如下的配置:
- <!-- the dataimport requestHandler -->
- <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.
- DataImportHandler">
- <lst name="defaults">
- <str name="config">db-data-config.xml</str>
- </lst>
- </requestHandler>
第四步:配置数据库映射文件,也就是第三步中的:db-data-config.xml文件。
在与solrconfig.xml相同的位置,也就是D:\xh_solr\tomcat-solr\solr\collection1\conf目录下,创建db-data-config.xml文件,然后加入如下的配置:
- <dataConfig>
- <dataSource driver="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/test" user="root" password="admin"/>
- <document>
- <entity name="user" query="SELECT user_id, user_name from
- users">
- <field column="user_id" name="id" />
- <field column="user_name" name="name" />
- </entity>
- </document>
- </dataConfig>
第五步:导入数据:启动tomcat,打开浏览器,并输入:
http://localhost:8983/solr/dataimport?command=full-import
如果没有问题的话,返回内容如下:
- <response>
- <lst name="responseHeader">
- <int name="status">0</int>
- <int name="QTime">53</int>
- </lst>
- <lst name="initArgs">
- <lst name="defaults">
- <str name="config">db-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="Total Requests made to DataSource">1</str>
- <str name="Total Rows Fetched">5</str>
- <str name="Total Documents Skipped">0</str>
- <str name="Full Dump Started">2013-04-21 19:42:44</str>
- <str name="">
- Indexing completed. Added/Updated: 5 documents. Deleted 0 documents.
- </str>
- <str name="Committed">2013-04-21 19:42:45</str>
- <str name="Total Documents Processed">5</str>
- <str name="Time taken">0:0:1.420</str>
- </lst>
- <str name="WARNING">
- This response format is experimental. It is likely to change in the future.
- </str>
- </response>
第六步:验证我们的索引,打开浏览器,输入:http://localhost:8983/solr/#/collection1/query或者是http://localhost:8983/solr/select/?q=text:jim
如果没有错误的话,输入http://localhost:8983/solr/select/?q=text:jim返回的内容如下:
- <response>
- <lst name="responseHeader">
- <int name="status">0</int>
- <int name="QTime">1</int>
- <lst name="params">
- <str name="q">text:jim</str>
- </lst>
- </lst>
- <result name="response" numFound="1" start="0">
- <doc>
- <str name="name">Jim</str>
- <str name="id">5</str>
- <long name="_version_">1432925833619570689</long>
- </doc>
- </result>
- </response>
如果我们比对数据库,发现在数据库中确定有这样一条数据: