欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-09 15:27:15
...

在项目开发过程中为了提高查询效率和降低数据库的压力,因此此时就将查询量大的数据放到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在同一级目录:

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


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>
solr5.0定时增量更新,实现数据同步


需要注意的是:

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

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

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



第二步:在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>

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

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


第三步:在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

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


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

第四步:需要引入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 包,需要和版本对应)

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


 引入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后千万不要有空格


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


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






相关标签: solr