solr全量更新和增量更新,定时增量更新详解

数据仓库系列13:增量更新和全量更新有什么区别,如何选择? 今天,让我们深入探讨这个数据仓库领域的核心问题,揭示增量更新和全量更新的秘密,帮助你在实际工作中做出明智的选择。 阅读详情

前言:我使用的是solr7.7.2,这篇博客的内容是我看到网上其他人的文章和自己的多次试验的总结和见解,内容都比较通俗易懂,同时也有太多不足之处,希望大佬看到可以指出。

一、全量更新

(1)什么是全量更新?

将数据库的数据导入到solr,就是数据更新,有两种更新方式,一种是全量更新,一种是增量更新。全量更新,顾名思义,即对solr中缓存的数据全部进行更新,对索引全部进行删除,重新创建,重新分词。
这里就不细讲了,如果你的数据可以成功导入到solr,那么这就是全量更新。

(2)全量更新的配置

【1】核心目录下创建一个data-config.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
	<dataSource
		type="JdbcDataSource"
		driver="com.mysql.jdbc.Driver"
		url="jdbc:mysql://127.0.0.1:3306/txws?useSSL=true"
		user= "root"
		password="1234"/> 
	<document>
		<entity name="product"
				query="select
					p.id,p.name,p.price,m.name merchant,c2.shortname province,c1.shortname city
					from 
					merchant m
					left join product p on m.id=p.merchant_id
					left join city c1 on m.city_id=c1.id
					left join city c2 on c1.pid=c2.id"
		>				
			<field column="id" name="id"/>
			<field column="name" name="name"/>
			<field column="price" name="price"/>
			<field column="merchant" name="merchant"/>
			<field column="province" name="province"/>
			<field column="city" name="city"/>			
		</entity>
	</document>
</dataConfig>

name是核心名
query里面的查询语句将查询到的数据导入到solr,只对全量更新有影响。

【2】核心的conf文件夹下的solrconfig.xml文件,在第一个requestHandler标签上面添加:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
		<lst name="defaults">
			<str name="config">data-config.xml</str>
		</lst>
</requestHandler>

【3】核心的conf文件夹下的managed-schema文件,在第一个field标签上面添加:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
		<lst name="defaults">
			<str name="config">data-config.xml</str>
		</lst>
</requestHandler>

【4】到solr后台管理页面,选择全量更新的选项,点击Execute

在这里插入图片描述

二、增量更新

(1)什么是增量更新?

增量更新,只更新导入solr的数据中,已经被数据库删除、修改、添加的数据,不会去动其他没有变化的数据。比如我在数据库中添加了一条数据,你在全量更新数据的时候,solr会全部替换原来的数据,而使用增量更新,solr仅仅是为一条新增的数据做了处理。

(2)为什么需要增量更新?

这个其实非常好理解,我们并非对数据库中数据全部增删改的时候,就没必要使用全量更新,这会使我们更新数据的效率变得非常低下。

(3)增量更新的配置

【1】首先要弄懂几个必要的属性,以及数据库建表事项,和dataimporter.properties 、data-config.xml里面的数据
query:查询数据库表符合记录数据
deltaQuery:增量索引查询主键ID —> 注意这个只能返回ID字段
deltaImportQuery:增量索引查询导入数据
deletedPkQuery:增量索引删除主键ID查询 —> 注意这个只能返回ID字段

【2】数据库配置注意事项
1.如果只涉及添加,与修改业务,那么数据库里只需额外有一个字段update_time
就可以了,类型为timpstamp
2.如果还涉及删除业务,那么数据里就需额外再多添加一个字段isdelete,int类型的
用0,1来标识,此条记录是否被删除
3.dataimporter.properties
这个配置文件很重要,它是用来记录当前时间与上一次修改时间的,通过它能够找出,那些,新添加的,修改的,或删除的记录标识,此条记录是否被删除的记录

在这里插入图片描述
4.这里这个文件的时间,和MySQL一样,涉及了一个时区问题,差八个小时,不懂时区问题的请自行百度。
【3】增量更新就是在全量更新的基础上加上一些配置,配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
	<dataSource
		type="JdbcDataSource"
		driver="com.mysql.jdbc.Driver"
		url="jdbc:mysql://127.0.0.1:3306/txws?useSSL=true"
		user= "root"
		password="1234"/> 
	<document>
		<entity pk="id" name="product"
				query="select
					p.id,p.name,p.price,m.name merchant,c2.shortname province,c1.shortname city
					from 
					merchant m
					left join product p on m.id=p.merchant_id
					left join city c1 on m.city_id=c1.id
					left join city c2 on c1.pid=c2.id where isdelete=0"
				deltaQuery="select id from product where update_date>'${dataimporter.last_index_time}+8' and isdelete=0"
				deletedPkQuery="select id from product where isdelete=1"
				deltaImportQuery = "select
					p.id,p.name,p.price,m.name merchant,c2.shortname province,c1.shortname city
					from 
					merchant m
					left join product p on m.id=p.merchant_id
					left join city c1 on m.city_id=c1.id
					left join city c2 on c1.pid=c2.id where p.id=${dih.delta.id}"
		>				
			<field column="id" name="id"/>
			<field column="name" name="name"/>
			<field column="price" name="price"/>
			<field column="merchant" name="merchant"/>
			<field column="province" name="province"/>
			<field column="city" name="city"/>			
		</entity>
	</document>
</dataConfig>

1、数据表不要忘记添加两个字段,这里我添加的字段是isdelete,update_date。
2、deltaQuery就是通过比较数据库和solr修改或插入数据的时间(左边update_data代表数据库的时间,右边代表solr的时间)找到你数据库的更新了的数据,+8表示加了八个小时,如果你的数据库没有更改过时区,那么你就不需要+8小时。
3、deletedPkQuery通过idelete=1的判断条件判断数据库中进行了逻辑删除的数据,拿到id。
4、deltaImportQuery 更加上面两个查询语句查到的id来更新数据,内容和query基本一致,只是多了一个id的筛选。
【4】管理界面手动增量更新
在这里插入图片描述

三、定时增量更新

(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。

Solr 的全量更新与增量更新 Solr 的全量更新与增量更新 1.全量更新 全量,这个很好理解。就是每天定时(避开业务高峰期)或者周期性全量把数据从一个地方拷贝到另外一个地方; 全量的话,可以采用直接全部覆盖(使用“新”数据覆盖“旧”数据);或者走更新逻辑(覆盖前判断下,如果新旧不一致,就更新); 这里面有一个隐藏的问题:如果采用异步写,主数据物理删除了,怎么直接通过全量数据同步?这就需要借助一些中间操作日志文件,或者其他手段,把这些“看不到”的数据记录起来。 2.增量更新 增量的基础是全量,就是你要使用某种方式先把全量数据拷贝过来,然 阅读详情

相关推荐

PostgreSQL 中如何实现数据的增量更新和全量更新的平衡?

在数据库管理中,数据的更新操作是常见的任务。对于大型数据集或高并发的系统,选择合适的更新策略至关重要。增量更新和全量更新是两种常见的数据更新方式,如何在 PostgreSQL 中平衡这两种更新方式以确保数据的一致性、性能和可靠性是一个值得深入探讨的问题。

技术笔记 2012

Android中的全量更新、增量更新以及热更新

在客户端开发过程中,我们可能会遇到这样一种需求:点击某个按钮弹出一个弹窗,提示我们可以更新到apk的某个版本,或者我们可以通过服务端接口进行强制更新。在这种需求中,我们是不需要通过应用商店来更新我们的apk的,而是直接在apk内部进行版本更新。这次我们就来看看实现这种应用内更新的几种方式。当然,这种玩法只能在国内玩,海外的话会被Googleplay据审的。如果是海外的应用要更新apk,只能在GooglePlay上上传新版本的包。

qq_36828822的博客 8723

详细解说solr全量更新和增量更新

出现背景: 数据如果保留多份,就会存在一致性问题,就需要同步,同步分为两大类:全量和增量 目的:更新页面显示内容信息。 同步更新方式: 全量更新和增量更新 全量: 全量,这个很好理解。就是每天定时(避开任务高峰期)或者周期性全量把数据从一个地方拷贝到另外一个地方; 全量的话,可以采用直接全部覆盖(使用“新”数据覆盖“旧”数据);或者走更新逻辑(覆盖前判断下,如果新旧不一致,就更新); 这里面有一个隐藏的问题:如果采用异步写,主数据物理删除了,怎么直接通过全量数据同步?这就需要借助一些中间操作日志文件,或者其

T_4396的博客 3518

solr全量更新和增量更新以及定时增量更新详解

文章目录一、全量更新(1)什么是全量更新?(2)全量更新怎么用?二、增量更新(1)什么是增量更新?(2)为什么需要增量更新?(3)增量更新的配置三、定时增量更新(1)什么是定时增量更新?(2)定时增量更新的配置 我使用的是solr7.7.2,这篇博客的内容是我看到网上其他人的文章和自己的多次试验的总结和见解,内容都比较通俗易懂,同时也有太多不足之处,希望大佬看到可以指出。 一、全量更新 (1)什么是全量更新? 将数据库的数据导入到solr,就是数据更新,有两种更新方式,一种是全量更新,一种是增量更新。全量更

GX的博客 2559

全文索引----solr服务器更新全量索引

      solr索引设置完成后,需要根据数据库的变化及时更新索引,索引的更新有两种方式,全量更新和增量更新。顾名思义,全量更新即删除solr服务器上的所有索引,然后重新导入数据,增量索引即只更新修改的数据,本篇文章介绍全量索引更新。     一 配置数据源     1.1 数据库       我们使用单表作为测试数据源,包括三个字段,id,title,content,方便测试,使用var...

天道酬勤 地道酬善 人道酬诚 1万+

AI时代,程序员何去何从?别慌,看完这篇你就明白了

AI时代程序员的发展方向 摘要:随着AI代码助手的普及,程序员行业面临变革。本文通过实际案例展示AI写代码的能力与局限:AI能生成基础功能代码(如RESTful API、数据处理脚本),但缺乏业务理解、系统设计和复杂逻辑处理能力。程序员的核心价值在于需求分析、架构设计、性能优化等高层能力。未来程序员应: 掌握AI工具提升效率 专注于创新和架构设计 培养业务理解能力 持续学习新技术 AI不会取代程序员,但会淘汰不会使用AI的程序员。建议开发者拥抱AI工具,将其作为助手而非威胁,聚焦高价值工作。

yunque_xianguang的博客 908

solr全量更新和增量更新的理解

1、全量更新 我们在solr页面将数据库中的数据全部导入到solr中的方式就叫做solr的全量更新 full-import:英文意思为全量更新,此选项的作用即使将数据库中的数据全部导入到solr中,当我们现在的数据量较小时,solr的全量更新是很快的,可是如果我们在大数据量的情况下,还需要进行全量更新是不是会使得工作量变得十分的大呢? 2、增量更新 配置 在全量更新的配置基础上需要增加配置字段解释: 1<!-- transformer 格式转化:HTMLStripTransformer 索引

Systemoutprintl的博客 1740

深入剖析STM32F103 I2C总线死锁问题及高效应对策略

本文深入剖析了STM32F103硬件I2C总线在轮询模式下发生死锁的根本原因,即硬件状态机的预取机制与软件响应速度不匹配。文章提供了高效的解决方案,包括在轮询模式下提前发送NACK/STOP信号、降低总线速度,以及治本的中断与DMA应用策略,帮助开发者根据项目需求选择最合适的方案,彻底解决这一经典硬件缺陷问题。

weixin_29184371的博客 206

solr全量更新和增量更新

1、全量更新 数据库的数据导入到 solr缓存库就是更新 full-import:全量更新,意思是重新把全部数据从数据库导入,一般会先删除现有的,再进行导入,所以需要勾选Clean清除本地 2、增量更新 2.1.对应全量更新,增量更新新增的 <!-- transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签 ---> <!-- query:查询数据库表符合记录数据 ---> <!-- deltaQuery:增

zeit浅白的博客 941

驯服电源尖峰:从BUCK/BOOST环路剖析到高di/dt噪声的实战抑制

本文深入探讨了电源系统中高di/dt噪声的产生机制及抑制方法,通过BUCK/BOOST电路的环路分析,揭示了电流路径不连续导致的电压尖峰问题。文章提供了实用的PCB布局技巧和噪声抑制策略,包括最短回路原则、铺铜优化和过孔阵列战术,帮助工程师有效降低EMI噪声,提升电源系统的稳定性。

weixin_29587015的博客 273

关于华为高斯数据库出现Invalid or unsupported by client SCRAM mechanisms定位解决的过程

最近公司有个新项目使用的是高斯数据库,因为我们的项目是直接从别的项目组拿来的,配置都是已经配好的,但是在放到正式环境上之后出现报错。起初我们以为是测试和正式的版本不一致,但是结果是版本一致的。最后这个问题搞了我们几个小时,都没法解决。

Curtisjia的博客 3176

Solr全量更新和增量更新

Solr全量更新和增量更新 1.什么是全量更新 数据库中的数据—》solr缓存中 就是把数据库中的所有数据通过solr客户端中 full-import 就可以做全量更新了 需要注意的就,在做全量更新之前,需要clean一下,把solr之前的缓存数据都删掉 2.什么是增量更新呢 1.怎么用呢,首先你得搞得这些重要的属性 <!-- transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签 ---> <!-- query:查询数据库表

qq_44737039的博客 408

Ubuntu 20.04 系统备份和还原

最近大家Ubuntu开发环境,经常出现搭着搭着系统就挂了,于是开始琢磨了Ubuntu系统的备份和还原,以备不时之需,Linux环境搭建实在是有点太细,好多情况下,就算曾经搭建过一遍,再次搭建有些包还是忘了安装,做好备份是十分必要的。 经过了一番研究,Ubuntu备份有很多方式:根目录tar、dd、Systemback(1.0版本已经不维护了,2.0版本收费)等等,最终决定使用 —— Timesift, 因为方便一些。 文章参考:小马虎的救星——Timeshift Timeshift Timeshift,是L

Z_Paper的博客 2万+

solr6定时增量更新

solr6定时增量更新时遇到的问题及解决方案

yxue1118的专栏 4709

手把手教你学Simulink--基于飞行控制与稳定性的场景实例:多旋翼无人机在风扰动下的稳定性分析

本文介绍了使用Simulink仿真多旋翼无人机在风扰动下稳定性的方法。通过构建包含飞行器动力学模型、PID控制系统和环境模拟模块的仿真系统,分析了无人机在不同风速条件下的飞行性能。详细说明了从创建模型、设置动力学方程、设计PID控制器到添加风扰动模型的完整流程,并提供了性能评估指标。该方法可用于验证控制系统有效性,优化飞行稳定性参数,为无人机控制系统的设计和调试提供参考。

MHD0815的博客 328

PCL 基于法线微分(DoN)的点云分割【2026最新版】

基于法线微分的分割。博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 39万+

Solr 全量更新和增量更新 配置方式

deltaImportQuery 指定的sql要求我们将满足PK的数据进行填充,需要配置在FieId中出现的属性,其作用和query类似,只不过该作用是将前面两个deltaQuery、deletedPkQuery过滤后进行了一次封装,以更新部分需更新的记录所对应的Solr的数据库索引。基于项目的特殊性,本项目将所有的文本类型记录的表全部读取进入Solr进行管理,但因文本记录的表比较多和复杂,导致了后面在使用solr自带功能增量更新时出现了问题。该配置在使用全量更新full-import显得尤为的突出;

猫步轻移,以学求知。余于此方寸之地,如猫观鼠,细察技艺所得,思维所悟。灵思如猫之警觉,日积月累,终成智海; 1479

16、Cortex-M7处理器:高性能与复杂架构解析

本文深入解析了Cortex-M7处理器的高性能架构与复杂设计,涵盖AHB总线矩阵优化、超标量六阶段双发射流水线、增强型分支预测单元及双精度浮点支持。重点介绍了其独特的内存层次结构,包括指令与数据TCM、片上缓存和AXI-M 64位总线接口,提升系统并行性与执行效率。通过实际测试对比M4与M7性能差异,并演示如何将代码与数据定位到TCM以实现零等待运行。同时阐述了缓存机制的工作原理及其对系统性能的影响,为开发者提供全面的性能优化指导。

a1b2c3d的博客 126

Solr的增量更新和全量更新对比

Solr的增量更新和全量更新 solr的简介 solr是一个采用java语言,基于Lucene的全文搜索引擎。 solr的一些原理 solr通过数据库的数据导入到索引库中,并且给数据创建相应的索引,用来提高搜索的速度。而当数据库的数据发生改变我们需要来和数据库的数据进行同步的时候就用到了全量更新和增量更新 先来说一下全量更新 全量更新顾名思义就是全部都更新,当我们的索引库需要更新数据库数据的时候,就把数据全部拿过来进行更新同步。 使用全量更新 (注意这里—你的文件名可能会因为solr版本问题而和我的文件名

少年的博客 3897

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Solr全量索引、增量索引和定时增量索引配置

一、全量索引 在solr_home\solr\core0\conf\solrconfig.xml文件中增加 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str&gt...

铭毅雨的博客 607

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Solr连接MySQL数据库实现 全量更新、增量更新、定时增量更新

Solr的增量更新与定时增量更新

dongyan3595的博客 2589

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

solr全量更新和增量更新的认识

solr 的全量更新与增量更新 solr 的增量更新 1.首先要弄懂几个必要的属性,以及数据库建表事项,和dataimporter.properties 、data-config.xml里面的数据 2.数据库配置注意事项 1.如果只涉及添加,与修改业务,那么数据库里只需额外有一个timpstamp字段 就可以了,默认值为当前系统时间,CURRENT_TIMESTAMP 2.如果还涉及删除业务,那么数据里就需额外再多添加一个字段isdelete,int类型的 用0,1来标识,此条记录是否被

dataEmals的博客 270

solr全量更新和增量更新!

直接进入主题 一、solr的全量更新 1.core/conf 目录下的 solrconfig.xml,新增如下配置 <!--添加如下配置 增加resultHandler配置 --> <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="conf

weixin_46945684的博客 300
上一篇: 关系型数据库三大范式介绍
下一篇: java接入支付宝支付接口沙箱环境测试(傻瓜式,有手就行版本)
JavadeSon
博客等级 码龄7年 5粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值