Solr自动更新索引

前言

几年前在集成solr版本4.x和6.x 时,曾搞过定时自动更新索引的功能;时过境迁,这次基于solr8.5.1版,来搞 定时自动更新索引的功能,顺便做个笔记,省得下次又需要采坑

本文solr版本基于8.5.1

solr定时更新索引的思路

具体思路:通过定时器定时调用 resultful接口,从而让solr定时更新索引. 这里是不是有疑问,

  • 哪来的resuful接口?
  • solr又怎么会定时更新索引?

这个可以从solr的管理界面得到答案,看下面


在这里插入图片描述

当执行导入数据生成索引操作时,管理界面是通过resultful方式来调用接口,从而让solr服务去导入数据并更新索引

当然也可以不用全量导入数据,数据多的情况下,每次全量导入,那耗时又耗内存,这时看到界面, 有个可选项的delta-import,这是执行增量导入的


在这里插入图片描述
以上就是solr定时更新索引在管理界面的的大致实现思路,知道了实现思路,那我们也就可以在自家项目里 实现定时更新索引

实现solr定时更新索引

1.下载solr的定时更新包和配置文件 [链接:https://pan.baidu.com/s/1LrS5cmlmjGfouVxZM6sztQ 提取码:yv1j]

ps: 这里面的jar包是我们需要用到的,而这里面有一份是源码,可以看下供参考,当然,这也是我从别人的链接找来的

2.将 solr-dataimport-scheduler.jar 包 放到 tomcat\webapps\solr\WEB-INF\lib目录下(tomcat启动方式,jboss方式也差不多是这个目录)

3.在solr_home\conf 目录下, 没有conf目录则自行创建,将下载的 dataimport.properties 文件 放到 conf目录下,根据需求改其参数

4.tomcat\webapps\solr\WEB-INF目录下的web.xml文件内,新增监听器,将以下代码复制进去,放到 “web-app” 标签内

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

5.打开 solr_home\collectionA\conf\solr-data-config.xml文件, 可能你的solr_core配置中 不是solr-data-config这个名称,貌似是版本差异,名称也不一样,有的版本是data-config这个名称.

新增如下,都是用于增量更新的配置,deltaQuery属性和deltaImportQuery属性,这里有个必须的字段,就是数据表中必须有个用于标注时间的字段

ps: 假设我上一次更新的时间是2019.12.02,那我下次增量更新就得拿这个时间,这个时间是存在solr_home\collectionA\conf\dataimport.properties文件内的last_index_time属性的,拿这个时间去数据库 跟 这个标注时间的字段进行比较,在上一次更新时间之后的数据,全都是本次进行增量更新的数据.

 	<dataConfig>
	    <dataSource name="solrDB" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.1.10:3306/localdb" user="admin" password="123456" />
	  <document>
	        <entity pk="id" dataSource="solrDB" name="z_solr_test" query="select id, name, content, update_time from z_solr_test" 
			deltaImportQuery="select id, name, content, update_time from z_solr_test where id='${dih.delta.id}'" 
	        deltaQuery="SELECT id, name, content, update_time FROM z_solr_test where update_time >'${dataimporter.last_index_time}'">
	            <field column="id" name="id" />
	            <field column="name" name="name" />
	            <field column="content" name="content" />
				<field column="update_time" name="update_time"/>
	        </entity>
	    </document>
	</dataConfig>

如此这般,就完成solr定时自动更新的功能,此时当我在数据库增加一条记录,solr就会定时自动生成索引, 解放双手的时刻到了~~

疑问

在solr_home/conf目录里的dataimport.properties文件有什么用?

这个可以看下源码部分,这里面的配置都会被读取,最后拼接成resuful接口的方式,如下截图

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值