设为首页 收藏本站
查看: 1261|回复: 0

[经验分享] 10.Solr4.10.3数据导入(DIH全量增量同步Mysql数据)

[复制链接]

尚未签到

发表于 2017-12-20 10:08:37 | 显示全部楼层 |阅读模式
  转载请出自出处:http://www.cnblogs.com/hd3013779515/
  1.创建MySQL数据
  

create database solr;  

  

use solr;  

  

DROP TABLE IF EXISTS student;  

  

CREATE TABLE student (  

  
id
char(10) NOT NULL,  

  
stu_name
varchar(50) DEFAULT NULL,  

  
stu_sex
int(1) DEFAULT NULL,  

  
stu_address
varchar(200) DEFAULT NULL,  

  
updateTime
timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  

  
isDeleted
int(1) DEFAULT 0,  

  

PRIMARY KEY (id)  

  
) ENGINE
=InnoDB DEFAULT CHARSET=utf8;  

  

INSERT INTO student VALUES ('1000000001', '李莉', 0, '上海市中山路',default,default);  

  

INSERT INTO student VALUES ('1000000002', 'Tom', 1, 'NewYork',default,default);  

  

INSERT INTO student VALUES ('1000000003', '张小贝', 0, '江西省泰和县中山路',default,default);  

  

INSERT INTO student VALUES ('1000000004', '鲍勃', 1, '北京市海淀区知春路',default,default);  

  

INSERT INTO student VALUES ('1000000005', 'Tim', 0, 'Paris',default,default);  

  

select * from student;  

  2. DIH全量从MYSQL数据库导入数据
  1配置/home/solrhome/collection1/conf/solrconfig.xml
  vim /home/solrhome/collection1/conf/solrconfig.xml
  在<requestHandler name="/select">前面上加上一个dataimport的处理的Handler
  

<requestHandler name="/dataimport">  

  
<lst name="defaults">
  

  
<str name="config">data-config.xml</str>
  

  
</lst>
  

  
</requestHandler>
  

  2在同目录下添加data-config.xml
  vim /home/solrhome/collection1/conf/data-config.xml
  

<?xml version="1.0" encoding="UTF-8"?>  

  
<dataConfig>
  

  
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.137.168:3306/solr" user="root" password="root" batchSize="-1" />
  

  
<document name="testDoc">
  

  
<entity name="student" pk="id"
  

  
query="select * from student">
  

  
<field column="id" name="id"/>
  

  
<field column="stu_name" name="stu_name"/>
  

  
<field column="stu_sex" name="stu_sex"/>
  

  
<field column="stu_address" name="stu_address"/>
  

  
</entity>
  

  
</document>
  

  
</dataConfig>
  

  说明:
  dataSource是数据库数据源。
  Entity就是一张表对应的实体,pk是主键,query是查询语句。
  Field对应一个字段,column是数据库里的column名,后面的name属性对应着Solr的Filed的名字。
  3修改同目录下的schema.xml,这是Solr对数据库里的数据进行索引的模式
  vim /home/solrhome/collection1/conf/schema.xml
  

<field name="stu_name" type="text_ik" indexed="true" stored="true" multiValued="false" />  

  
<field name="stu_sex" type="int" indexed="true" stored="true" multiValued="false" />
  

  
<field name="stu_address" type="text_ik" indexed="true" stored="true" multiValued="false" />
  

  4)拷贝关联jar
  拷贝mysql-connector-java-3.1.13-bin.jar和solr-dataimporthandler-4.10.3.jar
  cp /usr/local/solr-4.10.3/dist/solr-dataimporthandler-4.10.3.jar /home/tomcat6/webapps/solr/WEB-INF/lib/
  cp /home/test/mysql-connector-java-3.1.13-bin.jar /home/tomcat6/webapps/solr/WEB-INF/lib/
  5)重启Solr
  如果配置正确就可以启动成功。
  solrconfig.xml是solr的基础文件,里面配置了各种web请求处理器、请求响应处理器、日志、缓存等。
  schema.xml配置映射了各种数据类型的索引方案。分词器的配置、索引文档中包含的字段也在此配置。
  6)索引测试
  (1)Solr控制台导入
DSC0000.png

DSC0001.png

  (2)HTTP方式导入
  http://192.168.137.168:8080/solr/collection1/dataimport?command=full-import&commit=true&clean=false
DSC0002.png

  7)分批次导入数据
  如果数据库数据太大,可以分批次导入数据。
  vim /home/solrhome/collection1/conf/data-config.xml
  

<?xml version="1.0" encoding="UTF-8"?>  

  
<dataConfig>
  

  
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.137.168:3306/solr" user="root" password="root" batchSize="-1" />
  

  
<document name="testDoc">
  

  
<entity name="student" pk="id"
  

  
query="select * from student limit ${dataimporter.request.length} offset ${dataimporter.request.offset}">
  

  
<field column="id" name="id"/>
  

  
<field column="stu_name" name="stu_name"/>
  

  
<field column="stu_sex" name="stu_sex"/>
  

  
<field column="stu_address" name="stu_address"/>
  

  
</entity>
  

  
</document>
  

  
</dataConfig>
  

  上面主要是通过内置变量 “${dataimporter.request.length}”和 “${dataimporter.request.offset}”来设置一个批次索引的数据表记录数,请求的URL示例如下:
  http://192.168.137.168:8080/solr/collection1/dataimport?command=full-import&commit=true&clean=false&offset=0&length=2
DSC0003.png

  导入效果如下
   DSC0004.jpg
  3.DIH增量从MYSQL数据库导入数据
  已经学会了如何全量导入MySQL的数据,全量导入在数据量大的时候代价非常大,一般来说都会适用增量的方式来导入数据,下面介绍如何增量导入MYSQL数据库中的数据,以及如何设置定时来做。
  特别注意:DIH增量也是可以做全量数据导入,所以生产环境只要设置DIH增量方式。
  1)数据库表的更改
  新增一个字段updateTime,类型为timestamp,默认值为CURRENT_TIMESTAMP。有了这样一个字段,Solr才能判断增量导入的时候,哪些数据是新的。因为Solr本身有一个默认值last_index_time,记录最后一次做full import或者是delta import(增量导入)的时间,这个值存储在文件conf目录的dataimport.properties文件中。
  more dataimport.properties
DSC0005.jpg

  2data-config.xml中必要属性的设置
  vim /home/solrhome/collection1/conf/data-config.xml
  

<?xml version="1.0" encoding="UTF-8"?>  

  
<dataConfig>
  

  
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.137.168:3306/solr" user="root" password="root" batchSize="-1" />
  

  
<document name="testDoc">
  

  
<entity name="student" pk="id"
  

  
query="select * from student where isDeleted=0"
  


  
deltaImportQuery="select * from student where>  

  
deltaQuery="select>  

  
deletedPkQuery="select>  

  
<field column="id" name="id"/>
  

  
<field column="stu_name" name="stu_name"/>
  

  
<field column="stu_sex" name="stu_sex"/>
  

  
<field column="stu_address" name="stu_address"/>
  

  
</entity>
  

  
</document>
  

  
</dataConfig>
  

  transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签
  query:查询数据库表符合记录数据
  deltaQuery:增量索引查询主键ID  注意这个只能返回ID字段
  deltaImportQuery:增量索引查询导入的数据
  deletedPkQuery:增量索引删除主键ID查询 注意这个只能返回ID字段
  增量索引的原理是从数据库中根据deltaQuery指定的SQL语句查询出所有需要增量导入的数据的ID号。
  然后根据deltaImportQuery指定的SQL语句返回所有这些ID的数据,即为这次增量导入所要处理的数据。
  核心思想是:通过内置变量“${dih.delta.id}”和 “${dataimporter.last_index_time}”来记录本次要索引的id和最近一次索引的时间。
  如果业务中还有删除操作,可以在数据库中加一个isDeleted字段来表明该条数据是否已经被删除,这时候Solr在更新index的时候,可以根据这个字段来更新哪些已经删除了的记录的索引。
  3)测试增量导入
  DIH全量导入
  http://192.168.137.168:8080/solr/collection1/dataimport?command=full-import&commit=true&clean=true
DSC0006.png

   DSC0007.jpg
  修改student数据
  

update student set stu_name="jerry" where>

  

update student set isDeleted=1 where>

  

INSERT INTO student VALUES ('1000000006', 'Tim11', 0, 'Paris',default,default);  

  DIH增量导入数据
  http://192.168.137.168:8080/solr/collection1/dataimport?command=delta-import
DSC0008.png

DSC0009.jpg

  4)设置增量导入为定时执行的任务
  可以用Windows计划任务,或者Linux的Cron来定期访问增量导入的连接来完成定时增量导入的功能,这其实也是可以的,而且应该没什么问题。
  但是更方便,更加与Solr本身集成度高的是利用其自身的定时增量导入功能。
  1.增加关联jar
  cp /home/test/apache-solr-dataimportscheduler.jar /home/tomcat6/webapps/solr/WEB-INF/lib/
  2、修改solr的WEB-INF目录下面的web.xml文件:
  vim /home/tomcat6/webapps/solr/WEB-INF/web.xml
  为<web-app>元素添加一个子元素
  

<listener>  

  
<listener-class>
  

  
org.apache.solr.handler.dataimport.scheduler.ApplicationListener
  

  
</listener-class>
  

  
</listener>
  

  3、新建配置文件dataimport.properties:
  在SOLR_HOME\solr目录下面新建一个目录conf(注意不是SOLR_HOME\solr\collection1下面的conf)
  mkdir /home/solrhome/conf
  vim /home/solrhome/conf/dataimport.properties
  下面是最终我的自动定时更新配置文件内容:
  

#################################################  

  
# #
  

  
# dataimport scheduler properties #
  

  
# #
  

  
#################################################
  

  
# to sync or not to sync
  

  
# 1 - active; anything else - inactive
  

  
syncEnabled=1
  

  
# which cores to schedule
  

  
# in a multi-core environment you can decide which cores you want syncronized
  

  
# leave empty or comment it out if using single-core deployment
  

  
# syncCores=game,resource
  

  
syncCores=collection1
  

  
# solr server name or IP address
  

  
# [defaults to localhost if empty]
  

  
server=192.168.137.168
  

  
# solr server port
  

  
# [defaults to 80 if empty]
  

  
port=8080
  

  
# application name/context
  

  
# [defaults to current ServletContextListener's context (app) name]
  

  
webapp=solr
  

  
# URLparams [mandatory]
  

  
# remainder of URL
  

  
#http://localhost:8983/solr/collection1/dataimport?command=delta-import
&clean=false&commit=true  

  
params=/dataimport?command=delta-import
&clean=false&commit=true  

  
# schedule interval
  

  
# number of minutes between two runs
  

  
# [defaults to 30 if empty]
  

  
interval=1
  

  
# 重做索引的时间间隔,单位分钟,默认7200,即1天;
  

  
# 为空,为0,或者注释掉:表示永不重做索引
  

  
reBuildIndexInterval=2
  

  
# 重做索引的参数
  

  
reBuildIndexParams=/dataimport?command=full-import
&clean=true&commit=true  

  
# 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
  

  
# 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期
  

  
reBuildIndexBeginTime=03:10:00
  

  4、测试
  重启tomcat
  一般来说要在你的项目中引入Solr需要考虑以下几点:
  1、数据更新频率:每天数据增量有多大,及时更新还是定时更新
  2、数据总量:数据要保存多长时间
  3、一致性要求:期望多长时间内看到更新的数据,最长允许多长时间延迟
  4、数据特点:数据源包括哪些,平均单条记录大小
  5、业务特点:有哪些排序要求,检索条件
  6、资源复用:已有的硬件配置是怎样的,是否有升级计划
  参考http://www.cnblogs.com/luxiaoxun/p/4442770.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425979-1-1.html 上篇帖子: SolrCloud的搭建与稳定性测试 下篇帖子: 全文检索引擎Solr系列—–全文检索基本原理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表