solr5.0.0 定时增量更新,实现数据同步

在项目开发过程中为了提高查询效率和降低数据库的压力,因此此时就将查询量大的数据放到solr中,查询从solr中执行,不走数据库,但是数据库数据修改后怎么办呢。除了在程序中根据业务需求去操作solrJ实现索引同步外,也可以通过solr连接数据库,实现数据的定时同步,保证数据的一致性,具体使用方法根据业务需求选择。

项目中使用solrJ根据业务需求操作solr APl可以参考下另一篇博客:https://blog.csdn.net/qq_37138756/article/details/80828950

 

第一步:在solrHome\core\conf(core为我创建的solr库)目录下添加data-config.xml配置文件并编辑内容,这个文件和schema.xml在同一级目录:

 

data-config.xml配置文件并编辑内容:

<dataConfig>

<!--数据源-->
  <dataSource type="JdbcDataSource"   
              driver="com.mysql.jdbc.Driver"   
              url="jdbc:mysql://localhost:3306/testmaven"   
              user="root"   
              password="root"
                          />
						  
	 <!--索引库中的文档-->
  <document>
        <entity name="user"  pk="id" 
			query="select * from user u"
			deltaQuery="select id  from user where createTime >'${dih.last_index_time}'"    
           
            deltaImportQuery="select * from user where id='${dih.delta.id}">
			
			<!-- 
			query查询是指查询出表里所有的符合条件的数据
		        deltaQuery的意思是,查询出所有经过修改的记录的ID,可能是修改操作,添加操作,删除操作产生的			
		        deletedPkQuery此操作只查询那些数据库里伪删除的数据的ID(如delYn标识为1的数据)solr通过它来删除索引里面对应的数据
		        deltaImportQuery查询是获取以上两步的ID,然后把其全部数据获取,根据获取的数据对索引库进行更新操作,可能是删除,添加,修改
			-->
		
		<!-- field 数据库 与 solr域做映射 -->
		<!-- 每一个field映射着数据库中列与文档中的域,column是数据库列,name是solr的域(必须是在managed-schema文件中配置过的域才行) -->
		  <field column="id" name="id"/>
		  <field column="name" name="name"/>
		  <field column="password" name="password"/>
		  <field column="age" name="age"/>
		
		</entity>
  </document>

</dataConfig>

 

 

 

需要注意的是:

 

 因为我简单搭建了一个实例,所以没有逻辑删除键,如果需要逻辑删除的话,可以通过deletedPkQuery来进行查询 例:

 

 

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

 

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

 

 

 

第三步:在solrHome下新建一个conf文件夹,创建一个dataimport.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    
#  修改成你所使用的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=8085
#  application name/context    
#  [defaults to current ServletContextListener's context (app) name]    
#  这里默认不改      
webapp=solr
#  URL params [mandatory]    
#  remainder of URL    
#  这里要改成下面的形式      
params=/dataimport?command=delta-import&clean=false&commit=true
#  schedule interval     
#  [defaults to 30 if empty]    
#  这里是设置定时任务的,单位是分钟,也就是多长时间你检测一次数据同步,根据项目需求修改      
#  开始测试的时候为了方便看到效果,时间可以设置短一点,我这是60秒  
interval=1
#  重做索引的时间间隔,单位分钟,默认7200,即5天;     
#  为空,为0,或者注释掉:表示永不重做索引    
reBuildIndexInterval=7200
#  重做索引的参数    
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

 

第四步:需要引入jar包将solr-dataimportscheduler-1.0.jar , solr-dataimporthandler-5.0.0-.jar, solr-dataimporthandler-extras-5.0.0-.jar 

放到Tomcat目录下webapps\solr\WEB-INF\lib的目录下面

百度网盘:链接:https://pan.baidu.com/s/1G_fsGlK8ut8ihF1vpek1rQ 密码:zko6

 

(刚开始使用apache-solr-dataimportscheduler用到的版本是1.1.1,因为版本不支持,不能使用,在启动tomcat的时候会报错,后来替换为1.0版本的jar以后可以使用。solr-dataimporthandler-5.0.0-.jar,solr-dataimporthandler-extras-5.0.0-.jar 包,需要和版本对应)

 

 引入jar后,在Tomcat目录下webapps\solr\WEB-INF目录下的web.xml文件的servlet标签上添加下面的子标签。:

<listener>
		<listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
	</listener>

注意:org.apache.solr.handler.dataimport.scheduler.ApplicationListener后千万不要有空格

 

 

配置完成以后,重启solr,在数据库中对数据进行操作的时候,如果索引库中发生了变化,说明配置完成

 

 

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值