在项目开发过程中为了提高查询效率和降低数据库的压力,因此此时就将查询量大的数据放到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后面的目录。
祝各位博友配置的时候能顺利完成,有什么问题别忘了提问,大家一起讨论哦!