solr实践(2)-- Solr6.2.0从Mysql上导入数据

上一篇,我们介绍了如何搭建一个solr服务,这一篇,我们主要来实现一下,怎么将mysql的数据导入到solr服务中来,毕竟在平时的开发当中,首先肯定是将数据存在数据库的,所以对数据库数据建立索引很重要,下面废话不多说,进入主题。
上一篇,我们已经建立了solr_home目录,solr_home在项目中我们是用来存储索引的,所以这一篇就从这里开始。

1 创建Core Admin

在webapps中solrhome下新建一个文件夹名字叫做my_core(名字不固定,可以随便取,但是这个名字在后面的配置中会有所关联。)然后在my_core文件下新建一个名字叫做conf的文件夹(这个文件名字最后不要改。)然后把官网下下来的solr项目中solr-6.2.0\server\solr\configsets\data_driven_schema_configs\conf下的所有东西复制到conf中去。(注意不要复制错!)最后把solr-6.2.0\example\example-DIH\solr\db\conf下的admin-extra.html, admin-extra.menu-bottom.html ,admin-extra.menu-top.html三个文件也复制到conf中去。

2 配置相关包及其路径

把mysql所需的jar包和solr-6.2.0\dist下的solr-dataimporthandler-6.2.0.jar和solr-dataimporthandler-extras-6.2.0.jar都复制到项目WEB-INF\lib下。然后在solrconfig.xml文件中加入

<lib dir="D:/编程工具/tomcat/apache-tomcat-8.0.32-windows-x64/apache-tomcat-8.0.32/webapps/solr/WEB-INF/lib/" regex=".*\.jar" />

就是把WEB-INF\lib里面的jar包配置到项目中,我这里用的是绝对地址。这段代码大约在solrconfig.xml的75行处,前面有一堆类似的代码。

3 建立数据库表

在MYSQL中新建一张表。我这里的表名叫goods,你也可以自己建,这个没有要求,主要是之后的配置,按数据表配就行了。我的建表语句如下:

CREATE DATABASE IF NOT EXISTS solr;
USE solr;

DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(10) NOT NULL,
  `number` INT(20) DEFAULT NULL,
  `updateTime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT  INTO `goods`(`id`,`name`,`number`,`updateTime`) VALUES 
(1,'商品1',100,'2016-11-28 16:48:57'),
(2,'商品2',120,'2016-11-28 16:48:57'),
(3,'商品3',150,'2016-11-28 16:48:57'),
(4,'手机1',50,'2016-11-28 17:44:29');

4 添加data-config.xml

在solrconfig.xml的<requestHandler name="/select" class="solr.SearchHandler">之上添加:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  
    <lst name="defaults">  
        <str name="config">data-config.xml</str>  
    </lst>  
</requestHandler> 

然后在conf下新建data-config.xml文件。内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
        url="jdbc:mysql://127.0.0.1:3306/solr" user="root" password="123456" batchSize="-1" />
    <document>
        <entity name="goods" pk="id"  dataSource="source1"
                query="select * from  goods"
                deltaImportQuery="select * from goods where id='${dih.delta.id}'"
                deltaQuery="select id from goods where updateTime > '${dataimporter.last_index_time}'">
            <field column="id" name="id"/>
         <field column="name" name="name"/>
            <field column="number" name="number"/>
            <field column="updateTime" name="updateTime"/>
       </entity>
    </document>
</dataConfig>

解释一下:
dataSource是数据库数据源。Entity就是一张表对应的实体,pk是主键,query是查询语句。Field对应一个字段,column是数据库里的column名,后面的name属性对应着Solr的Filed的名字。其中solrdata是数据库名,goods是表名。
其中deltaQuery是增量索引,原理是从数据库中根据deltaQuery指定的SQL语句查询出所有需要增量导入的数据的ID号。然后根据deltaImportQuery指定的SQL语句返回所有这些ID的数据,即为这次增量导入所要处理的数据。核心思想是:通过内置变量“${dih.delta.id}”和 “${dataimporter.last_index_time}”来记录本次要索引的id和最近一次索引的时间。
最后在conf文件下的managed-schema配置field信息:

<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="name" type="string" indexed="true" stored="false"/>
<field name="number" type="int" indexed="true" stored="false"/>
<field name="updateTime" type="date" indexed="true" stored="true" />

<!--下面三个字段是系统本身不能删除的,删除会报错-->
<field name="_version_" type="long" indexed="true" stored="false"/>
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/> 

注意:id,name,number,updateTime是我们上面数据库的字段。下面三个field是系统本身的不能删除,否则会运行错误。

5 测试

启动tomcat,并在URL中输入http://127.0.0.1:8080/solr/index.html 路径。在core Selector选择刚刚添加的core。
选择core
选择刚刚添加的goods实体进行索引操作:我们这儿可以选择full-import或者delta-import(增量索引),选择增量索引需要把clean的勾给去掉,不然会清除之前的,增量的索引的初衷是对新增或者修改的记录重新索引,会追加到原有的索引文件当中。当我们选择full-import的时候,最好就是把原有的索引文件给清空重新索引。
导入数据
索引成功如下如所示:
索引成功
使用query进行测试,输入关键字查出了想要的结果:
query成功
自此。mysql数据导入solr就顺利完成了,有什么问题下面留言吧

6 相关参考

http://blog.csdn.net/linzhiqiang0316/article/details/51464461
http://blog.csdn.net/u010379996/article/details/51799418

7 扩展

更多专题资讯请关注博主站点 http://www.taneroom.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值