Solr定时增量更新
来源:互联网 发布:远场sar成像算法 编辑:程序博客网 时间:2024/05/16 14:59
1 概述
将数据库中的数据导入到了solr中之后,如果数据库中的数据有变动,solr中还是第一次导入的旧的数据,因此需要定时检测数据库中的数据变化,并实时将变化的数据同步到solr中。
2 配置定时同步
2.1 下载
下载地址:http://download.csdn.net/detail/vtopqx/9891724
将下载的solr-dataimport-scheduler.jar拷贝到solr的lib目录下,
如:G:\solr\server\solr-webapp\webapp\WEB-INF\lib
2.2 数据库配置
配置数据库字段,其中关键字段updateTime,该字段非常重要,有了这样一个字段,Solr才能判断增量导入的时候,哪些数据是新的。
因为Solr在dataimport.properties文件中会存储一个默认值last_index_time,记录最后一次做full import或者是delta import(增量导入)的时间。
2.3 solr配置
1、修改数据库连接文件配置db-data-config.xml文件,配置如下:
<dataConfig> <dataSource type="JdbcDataSource"driver="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/solr" user="root"password="root" /> <document> <entity name="solr_user"pk="id" query="SELECT* FROM solr_user where isdelete =0 " deltaImportQuery="SELECT* FROM solr_user where id = '${dih.delta.id}'" deletedPkQuery="SELECTid FROM solr_user where isdelete =1 "deltaQuery="SELECTid FROM solr_user where updateTime >'${dataimporter.last_index_time}'"> <field column="id"name="id"/> <field column="name"name="name"/> <fieldcolumn="updateTime" name="updateTime"/> </entity> </document> </dataConfig>
属性说明:
data-config.xml里面的数据
<!-- transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签 ---> <!-- query:查询数据库表符合记录数据 ---> <!-- deltaQuery:增量索引查询主键ID ---> 注意这个只能返回ID字段 <!-- deltaImportQuery:增量索引查询导入数据 ---> <!-- deletedPkQuery:增量索引删除主键ID查询 ---> 注意这个只能返回ID字段
配置说明:
query查询是指 查询出表里所有的符合条件的数据,因为笔者测试的有删除业务,所以
where 后面有一个限定条件isdelete=0,意思为查询未被删除的数据
(注意这个query查询只对第一次全量导入有作用,对增量导入不起作用)
deltaQuery的意思是,查询出所有经过修改的记录的ID
可能是修改操作,添加操作,删除操作产生的
(此查询只对增量导入起作用,而且只能返回ID值)
deletedPkQuery此操作值查询那些数据库里伪删除的数据的ID(即isdelete标识为1的数据)
solr通过它来删除索引里面对应的数据
(此查询只对增量导入起作用,而且只能返回ID值)
deltaImportQuery此查询是获取以上两步的ID,然后把其全部数据获取,根据获取的数据
对索引库进行更新操作,可能是删除,添加,修改
(此查询只对增量导入起作用,可以返回多个字段的值,一般情况下,都是返回所有字段的列)
注:
1.如果只涉及添加,与修改业务,那么数据库里只需额外有一个timpstamp字段
就可以了,默认值为当前系统时间,CURRENT_TIMESTAMP(笔者的数据为mysql的)
2.如果还涉及删除业务,那么数据里就需额外再多添加一个字段isdelete,int类型的
用0,1来标识,此条记录是否被删除,当然也可以用其他字段标识,ture或false都可以
2、修改managed-schema文件,新增索引字段
<field name="name"type="string" indexed="true" stored="true"multiValued="false"/><field name="content"type="string" indexed="true" stored="true"multiValued="false"/><field name="updateTime"type="date" indexed="true" stored="true" />
由于solr5.x中已经有默认<uniqueKey>id</uniqueKey>属性配置,因此当数据库字段名称为id时可以不用配置,主键字段为其它名称时需要配置<field>
2.4 定时同步配置
进入solr_home目录,如:/solr/server/solr/
新建conf目录,并创建dataimport.properties文件,内容如下:
################################################## ## 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:simplesyncCores=solr_db_scheduler # 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=8983 # 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
以上配置可以简单修改红色部分即可,默认为一分钟检测一次,如果有数据变动则同步。
2.5 测试
以上配置完成后,停止solr,并重启
Solr.cmd stop –all
Solr.cmd start
浏览器访问:http://localhost:8983/solr/ 选择相应的core后,可以看到之前的已导入的数据库数据有三条,
然后修改数据库数据,新增一条和修改一条以及删除一条:
改完之后,再次查询solr(注:由于前面配置的是1分钟后刷新,所以需要等一分钟),再次查询如下图:
可以看到张三已经被删除,王五做了修改,test新增。
至此solr与数据库数据同步完成。
- Solr定时增量更新
- solr学习四solr定时增量更新
- solr配置增量更新和定时更新数据库索引
- solr定时增量索引
- solr定时增量索引
- solr定时实时重建索引和增量更新
- solr定时实时重建索引和增量更新
- solr定时实时重建索引和增量更新
- solr定时实时重建索引和增量更新
- solr定时实时重建索引和增量更新
- solr定时实时重建索引和增量更新
- solr 增量更新
- 三、solr增量更新
- solr6定时增量更新
- SolrCloud定时增量更新
- solr配置自动增量更新
- solr配置自动增量更新
- solr增量更新的字段
- Python3 死链接查询脚本
- cm cdh5 hadoop安装
- 微信小程序input批量赋值(setData)
- 支持生成饼图的Python3.0的HTMLTestRunner
- SQLITE DB 損壞 SQLITE數據庫修復
- Solr定时增量更新
- 与你们分享我学习linux系统的三大妙招
- 剑指Offer学习 面试题7
- Cookie Session 浅知识
- 我来了
- C++中sprintf()函数的使用详解
- Web前端学习准备
- UVALive 4128 Steam Roller
- Rxjava