solr连接数据库,实现数据定时同步(个人项目经验)

在项目开发过程中为了提高查询效率和降低数据库的压力,因此此时就将查询量大的数据放到solr中,查询从solr中执行,不走数据库,但是数据库数据修改后怎么办呢,此时就要实现solr连接数据库,实现数据的定时同步,保证数据的一致性。

solr的搭建看我另一篇博客吧http://blog.csdn.net/millery22/article/details/51446014,直接进入主题。

第一步:添加data-config.xml配置文件并编辑内容,这个文件和schema.xml在同一级目录:

<dataConfig> 

    <dataSourcetype="JdbcDataSource" driver="com.mysql.jdbc.Driver"url="jdbc:mysql://192.168.10.100:3306/shopmm" user="root"password="123456" />  

    <document> 

        <entity name="shops"pk="shops"  

       query="SELECT id,spTitle,updateTimeFROM shops"  

       deltaImportQuery="SELECTid,spTitle,updateTime FROM shops where UserID='${dih.delta.id}'"  

       deltaQuery="SELECT id FROM shopswhere updateTime > '${dataimporter.last_index_time}'"> 

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

            <fieldcolumn="spTitle" name="spTitle"/>  

            <fieldcolumn="updateTime" name="updateTime"/> 

        </entity> 

    </document> 

</dataConfig>

第二步:在solrconfig.xml配置文件中引入data-config.xml文件。将下面的内容放到solrconfig.xml即可。

<requestHandler name="/dataimport"class="org.apache.solr.handler.dataimport.DataImportHandler">

<lst name="defaults">

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

</lst>

</requestHandler>

第三步:在schema.xml配置需要导入的字段。如下:

<field name="id" type="long" indexed="true" stored="true" required="true" multiValued="false" /> 
 <field name="title" type="text_ik" indexed="true" stored="true"/>
 <field name="updateTime" type="date" indexed="false" stored="true"/>   
 <uniqueKey>id</uniqueKey>

</pre><p><span style="font-size:18px;">这里我只给字段和主键的配置,其他文件头,数据类型等的配置就不多说了。</span></p><p><span style="font-size:18px;">到这里,配置就完成大部分了,可以使用链接的方式同步数据,但是这种方式很不灵活,每次修改完数据,还要访问这个链接完成同步,但是地址贴在下面,可以用来测试自己上面的配置有没有成功。</span></p><p><span style="font-size:18px;">全量导入:http:// 192.168.10.100:8080/solr/core/dataimport?command=full-import&clean=false&commit=true</span></p><p><span style="font-size:18px;">增量导入:http:// 192.168.10.100:8080/solr/core/dataimport?command=full-import&clean=false&commit=true</span></p><p><span style="font-size:18px;">上面的链接多了core,这个是我自定义的一个core,没有使用默认的collection1。</span></p><p><span style="font-size:18px;">第四步:配置定时自动配置,这个配置需要比较细心,这一步说完我会在后面说注意事项,希望博友看完这步别急动手操作,先看看注意事项,百利无一害。</span></p><p><span style="font-size:18px;">在solrhome下创建一个conf目录,然后将solr-dataimportscheduler-1.1.jar解压,将解压出来的dataimport.properties文件复制到conf目录下,对文件进行修改。</span></p><pre name="code" class="plain">#################################################

#                                              #

#       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 decidewhich cores you want syncronized

#  leave empty or comment it out if usingsingle-core deployment

#  修改成你所使用的core,我这里是我自定义的core

syncCores=core

 

#  solr server name or IP address

#  [defaults to localhost if empty]

#  这个一般都是localhost不会变

server=localhost

 

#  solr server port

#  [defaults to 80 if empty]

#  安装solr的tomcat端口,如果你使用的是默认的端口,就不用改了,否则你懂的

port=8080

 

#  application name/context

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

#  这里默认不改

webapp=solr

 

#  URL params [mandatory]

#  remainder of URL

#  这里要改成下面的形式

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=7200

 

#  重做索引的参数

reBuildIndexParams=/select?qt=/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


改文件配置结束后,再在solr的web.xml文件的web-app标签下添加下面的子标签。

<listener>      

<listener-class>      

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

</listener-class>      

</listener>


这个配置文件配结束后,将刚才的solr-dataimportscheduler-1.1.jar架包拷贝到tomcat下solr/WEB-INF/lib目录下,此时可能觉得就会结束了。但是还是看看下面的注意事项吧。

注意事项:

1、 solr-dataimportscheduler-1.1.jar架包是1.1版本的,使用1.1版本会出现Unsupported Media Type异常,不能使用增量导入功能。

2、 在增量导入的链接上拼接了一个clean=false,之前看网上提供的链接是clean=true,我再使用的时候会出现数据库的单条数据修改,在执行增量导入的时候,会将solr中的数据清空,只保留修改的那一条数据。

3、 这里的solrhome目录就是在catalina.in中配置的-Dsolr.solr.home后面的目录。

祝各位博友配置的时候能顺利完成,有什么问题别忘了提问,大家一起讨论哦!
  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿洞晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值