Solr自动更新索引

Posted 巨头之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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接口的方式,如下截图


以上是关于Solr自动更新索引的主要内容,如果未能解决你的问题,请参考以下文章

如何自动从数据库中索引solr中的数据

solr5.5.4 增量索引 自动同步mysql数据

Solr“实时”索引

Solr,阻止更新现有文档

solr定时更新索引

为啥solr增量更新修改过的数据在solr中显示不出来了