热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Solr定时增量更新

1概述将数据库中的数据导入到了solr中之后,如果数据库中的数据有变动,solr中还是第一次导入的旧的数据,因此需要定时检测数据库中的数据变化,并实时将变化的数据同步到solr中。2配
 概述

将数据库中的数据导入到了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文件,配置如下:

 


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}'">







 

属性说明:

data-config.xml里面的数据 

 

  

注意这个只能返回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文件,新增索引字段





由于solr5.x中已经有默认id属性配置,因此当数据库字段名称为id时可以不用配置,主键字段为其它名称时需要配置

 

 

 

 

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:simple
syncCores=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与数据库数据同步完成。


推荐阅读
  • hibernate映射组件映射
    在Hibernate中,component是某个实体的逻辑组成部分,它与实体的根本区别是没有oid(对象标识符),compo ... [详细]
  • Today,IstartedtocreateacoupleofJSPpagesfortheserver-sidepartofmyMScthesisprojectinordertob ... [详细]
  • MyBatis模糊查询和多条件查询一、ISmbmsUserDao层根据姓名模糊查询publicListgetUser();多条件查询publicList ... [详细]
  • mongodb复制集部署文档 ... [详细]
  • 软件自动化测试的学习路线
    软件自动化测试的学习步骤软件测试交流群关注软件测试技术公众号获取阅读目录软件自动化测试的学习步骤自动化测试的本质自动化测试学习的误区自动化测试的职位自动化测试分类Web自动化 ... [详细]
  • ajax 跨域webapi 最简单的demo(只介绍Get)
    这几天遇到一个nodejs的项目,使用VSCode开发,需要连接数据库的,但是用nodejs连接数据库比较繁琐,需要安装很多 ... [详细]
  • 大数据分析Python有哪些爬虫框架
    一、ScrapyScrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。。用 ... [详细]
  • 目录结构如下:Nginx基础知识NginxHTTP服务器的特色及优点Nginx的主要企业功能Nginx作为web服务器的主要应用场景包括:Nginx的安装安装环境 ... [详细]
  • 如何理解MyBatis动态SQL
    本篇内容主要讲解“如何理解MyBatis动态SQL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解M ... [详细]
  • Java学习日志(241网络编程自定义服务端与客户端)
    为什么80%的码农都做不了架构师?自定义服务端*演示客户端与服务端客户端:浏览器服务端:自定义*importjava.net.*;importjava ... [详细]
  • nginx+tomcat session 共享
    *tomcat1192.168.10.153*tomcat2192.168.10.154Tomcat工作模式必须为Nio模式。##添加如下内容,注意更换address ... [详细]
  • delphi控件大全
    本文章已收录于:delphi控件查询:http:www.torry.nethttp:www.jrsoftware.orgTb97最有名的工具条(ToolBar) ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了mysql中的索引相关的知识,希望对你有一定的参考价值。什么是索引: ... [详细]
  • JS动态生成表格案例 ... [详细]
  • 下面是一个用openssl实现获取https网页内容的demo,整个流程比较简单,主要封装的API如下staticinthttps_init(http ... [详细]
author-avatar
nora抹抹茶I
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有