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自动更新索引的主要内容,如果未能解决你的问题,请参考以下文章