文章目录
- 一、全量更新
- (1)什么是全量更新?
- (2)全量更新怎么用?
- 二、增量更新
- (1)什么是增量更新?
- (2)为什么需要增量更新?
- (3)增量更新的配置
- 三、定时增量更新
- (1)什么是定时增量更新?
- (2)定时增量更新的配置
我使用的是solr7.7.2,这篇博客的内容是我看到网上其他人的文章和自己的多次试验的总结和见解,内容都比较通俗易懂,同时也有太多不足之处,希望大佬看到可以指出。
一、全量更新
(1)什么是全量更新?
将数据库的数据导入到solr,就是数据更新,有两种更新方式,一种是全量更新,一种是增量更新。全量更新,顾名思义,即对solr中缓存的数据全部进行更新,对索引全部进行删除,重新创建,重新分词。
这里就不细讲了,如果你的数据可以成功导入到solr,那么这就是全量更新。
(2)全量更新怎么用?
full-import:全量更新,意思是重新把全部数据从数据库导入,一般会先删除现有的,再进行导入,所以需要勾选Clean清除本地
二、增量更新
(1)什么是增量更新?
增量更新,只更新导入solr的数据中,已经被数据库删除、修改、添加的数据,不会去动其他没有变化的数据。比如我在数据库中添加了一条数据,你在全量更新数据的时候,solr会全部替换原来的数据,而使用增量更新,solr仅仅是为一条新增的数据做了处理。
(2)为什么需要增量更新?
这个其实非常好理解,我们并非对数据库中数据全部增删改的时候,就没必要使用全量更新,这会使我们更新数据的效率变得非常低下
(3)增量更新的配置
【1】首先要弄懂几个必要的属性,以及数据库建表事项,和dataimporter.properties 、data-config.xml里面的数据
<!-- transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签 --->
<!-- query:查询数据库表符合记录数据 --->
<!-- deltaQuery:增量索引查询主键ID ---> 注意这个只能返回ID字段
<!-- deltaImportQuery:增量索引查询导入数据 --->
<!-- deletedPkQuery:增量索引删除主键ID查询 ---> 注意这个只能返回ID字段
【2】数据库配置注意事项
1.如果只涉及添加,与修改业务,那么数据库里只需额外有一个字段update_time
就可以了,类型为timpstamp
2.如果还涉及删除业务,那么数据里就需额外再多添加一个字段isdelete,int类型的
用0,1来标识,此条记录是否被删除
3.dataimporter.properties
这个配置文件很重要,它是用来记录当前时间与上一次修改时间的,通过它能够找出,那些,新添加的,修改的,或删除的记录标识,此条记录是否被删除的记录
4.更新 solr-data-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<!--数据源-->
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="xxx"
user="xxx"
password="xxx"/>
<document>
<entity name="solrTest"
query="SELECT fid,ftime,fcontent,ftitle,flastupdatetime FROM solrTest where flag = '0'"
deltaImportQuery = "SELECT fid,ftime,fcontent,ftitle,flastupdatetime FROM solrTest where fid = '${dataimporter.delta.fid}'"
deltaQuery = "SELECT fid FROM solrTest where flastupdatetime > '${dataimporter.last_index_time}' and flag = '0'"
deletedPkQuery = "SELECT fid FROM solrTest where flag = '1'"
>
<!--查询的数据和数据库索引意义对应column 是查询的字段name 是solr索引对应的字段-->
<field column="fid" name="fid"/>
<field column="ftitle" name="ftitle"/>
<field column="fcontent" name="fcontent"/>
<field column="flastupdatetime" name="flastupdatetime"/>
<field column="ftime" name="ftime"/>
</entity>
</document>
</dataConfig>
要记得在 managed-schema 中添加字段
重启服务器后,在网页端:
Command 选 delta-Import ,增量更新
三、定时增量更新
(1)什么是定时增量更新?
定时增量更新就是给solr配置一个定时任务,每隔一定时间solr会通过增量的方式导入数据。
(2)定时增量更新的配置
【1】准备jar包apache-solr-dataimportscheduler.jar、solr-dataimporthandler-7.7.2.jar、solr-dataimporthandler-extras-7.7.2.jar到 solr 项目的\WEB-INF\lib 目录下
只有一个jar包需要下载,其他的在solr的dist文件夹下面,需要下载的jar我就借花献佛了:
apache-solr-dataimportscheduler 的下载地址 链接:https://pan.baidu.com/s/1h4hDmc2KWtO4VPMnDGXSCg 提取码:qi7n
【2】修改web.xml文件配置监听,在第一个servlet节点前增加:
<listener>
<listener-class>
org.apache.solr.handler.dataimport.scheduler.ApplicationListener
</listener-class>
</listener>
【3】核心下面创建一个conf文件夹和dataimport.properties文件,注意路径、文件夹名、文件名必须是这些
【4】文件内容(根据自己情况配置):
在这里插入代码片#################################################
# #
# dataimport scheduler properties #
# #
#################################################
# tosync or not to sync
# 1- active; anything else - inactive
# 这里的配置不用修改
syncEnabled=1
# which cores to schedule
# ina multi-core environment you can decide which cores you want syncronized
# leave empty or comment it out if using single-core deployment
# 修改成你所使用的core,我这里是我自定义的core:simple
syncCores=active
# 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=8089
# application name/context
# [defaults to current ServletContextListener's context (app) name]
# 这里默认不改
webapp=solr
# URL params [mandatory]
# remainder of URL
# 这里改成下面的形式,solr同步数据时请求的链接
params=/dataimport?command=delta-import&clean=false&commit=true
# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
#这里是设置定时任务的,单位是分钟,也就是多长时间你检测一次数据同步,根据项目需求修改
# 开始测试的时候为了方便看到效果,时间可以设置短一点
interval=1
# 重做索引的时间间隔,单位分钟,默认7200,即5天;
# 为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200
# 重做索引的参数
reBuildIndexParams=/select?qt=/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
候重启solr就已经有了每分钟增量更新的效果了,可以自己数据库改条数据试试。还有要记得修改任何配置文件一定是重启solr才会生效,上面注意自己的SQL语句有没有问题,增量更新的SQL比全量更新的SQL多了一个id的判断,id不要忘记明确指定是哪张表的id