原文地址:http://www.ifunit.com/984/solr%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%BA%94%EF%BC%89dih%E5%A2%9E%E9%87%8F%E3%80%81%E5%AE%9A%E6%97%B6%E5%AF%BC%E5%85%A5%E5%B9%B6%E6%A3%80%E7%B4%A2%E6%95%B0%E6%8D%AE

注意:整个Solr学习系列使用的都是Solr4.5.1,更高版本应该也适用,耕地版本不知道。转载请注明出处:jiq·钦’s technical blog

(一)引言:

前面我的文章 DIH全量导入 中已经学会了如何全量导入Oralce和MySQL的数据,大家都知道全量导入在数据量大的时候代价非常大,一般来说都会适用增量的方式来导入数据,下面介绍如何增量导入MYSQL数据库中的数据,以及如何设置 定时来做。

下面介绍的所有操作都是基于前面已经完成的全量导入的基础上来做的。

(一)DIH增量从MYSQL数据库导入数据:

1、数据库表的更改:

前面已经创建好了一个UserInfo的表,这里为了能够进行增量导入,需要新增一个字段,类型为TIMESTAMP,默认值为CURRENT_TIMESTAMP。

有了这样一个字段,Solr才能判断增量导入的时候,哪些数据是新的。

因为Solr本身有一个默认值last_index_time,记录最后一次做full import或者是delta import(增量导入)的时间,这个值存储在文件conf目录的dataimport.properties文件中。

2、data-config.xml中必要属性的设置:

       <!--  transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签   ---> <!--  query:查询数据库表符合记录数据   ---> <!--  deltaQuery:增量索引查询主键ID    --->    注意这个只能返回ID字段 <!--  deltaImportQuery:增量索引查询导入的数据  ---> <!--  deletedPkQuery:增量索引删除主键ID查询  ---> 注意这个只能返回ID字段 

有关“query”,“deltaImportQuery”, “deltaQuery”的解释,引用官网说明,如下所示:

  • The query gives the data needed to populate fields of the Solr document in full-import
  • The deltaImportQuery gives the data needed to populate fields when running a delta-import
  • The deltaQuery gives the primary keys of the current entity which have changes since the last index time

最终针对步骤一中创建的UserInfo表,我们的data-config.xml文件的配置内容如下:

<dataConfig><dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="passok" /> <document><entity name="userInfo" pk="UserID"
query="SELECT * FROM userinfo"
deltaImportQuery="SELECT * FROM userinfo where UserID='${dih.delta.UserID}'"
deltaQuery="SELECT UserID FROM userinfo where UpdateTime > '${dataimporter.last_index_time}'"><field column="UserID" name="id"/> <field column="UserName" name="userName"/> <field column="UserAge" name="userAge"/><field column="UpdateTime" name="updateTime"/></entity></document>
</dataConfig>

意思是首先按照query指定的SQL语句查询出符合条件的记录。

然后从这些数据中根据deltaQuery指定的SQL语句查询出所有需要增量导入的数据的ID号。

最后根据deltaImportQuery指定的SQL语句返回所有这些ID的数据,即为这次增量导入所要处理的数据。

核心思想是:通过内置变量“${dih.delta.id}”和 “${dataimporter.last_index_time}”来记录本次要索引的id和最近一次索引的时间。

注意:刚新加上的UpdateTime字段也要在field属性中配置,同时也要在schema.xml文件中配置:<field name="updateTime" type="date" indexed="true" stored="true" />

3、测试增量导入:

在浏览器中输入:http://localhost:8087/solr/dataimport?command=delta-import  然后到http://localhost:8087/solr/#/collection1/query检索一条不存在的数据,然后利用SQL语句插入一条数据:

INSERT INTO `test`.`userinfo`
(`UserID`,
`UserName`,
`UserAge`)
VALUES
(6,
'季义钦增量数据测试',
25);

再次在浏览器中数据刚才的连接,再次检索。

(二)设置增量导入为定时执行的任务:

很多人利用Windows计划任务,或者Linux的Cron来定期访问增量导入的连接来完成定时增量导入的功能,这其实也是可以的,而且应该没什么问题。

但是更方便,更加与Solr本身集成度高的是利用其自身的定时增量导入功能。

1、下载apache-solr-dataimportscheduler-1.0.jar放到Tomcat的webapps的solr目录的WEB-INF的lib目录下:

下载地址:http://code.google.com/p/solr-dataimport-scheduler/downloads/list

也可以到我的云盘下载:http://pan.baidu.com/s/1dDw0MRn

2、修改solr的WEB-INF目录下面的web.xml文件:

为<web-app>元素添加一个子元素

<listener>  <listener-class>  org.apache.solr.handler.dataimport.scheduler.ApplicationListener  </listener-class>  </listener>

3、新建配置文件dataimport.properties:

在SOLR_HOME\solr目录下面新建一个目录conf(注意不是SOLR_HOME\solr\collection1下面的conf),然后用解压文件打开apache-solr-dataimportscheduler-1.0.jar文件,将里面的dataimport.properties文件拷贝过来,进行修改,下面是最终我的自动定时更新配置文件内容:

#################################################
#                                               #
#       dataimport scheduler properties         #
#                                               #
##################################################  to sync or not to sync
#  1 - active; anything else - inactive
syncEnabled=1#  which cores to schedule
#  in a multi-core environment you can decide which cores you want syncronized
#  leave empty or comment it out if using single-core deployment
# syncCores=game,resource #因为我的是single-core,所以注释掉了,默认就是collection1#  solr server name or IP address
#  [defaults to localhost if empty]
server=localhost#  solr server port
#  [defaults to 80 if empty]
port=8087#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
webapp=solr#  URL params [mandatory]
#  remainder of URL
#  增量更新的请求参数
params=/dataimport?command=delta-import&clean=true&commit=true#  schedule interval
#  number of minutes between two runs
#  [defaults to 30 if empty]
#  这里配置的是2min一次
interval=2#  重做索引的时间间隔,单位分钟,默认7200,即5天;
#  为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200#  重做索引的参数
reBuildIndexParams=/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

至此就完成了定时增量更新的配置,启动tomcat服务器,不需要再浏览器请求增量导入了,可以看到已经开始定期增量更新了。

================================ 一般来说要在你的项目中引入Solr需要考虑以下几点:

1、数据更新频率:每天数据增量有多大,随时更新还是定时更新
2、数据总量:数据要保存多长时间
3、一致性要求:期望多长时间内看到更新的数据,最长允许多长时间延迟
4、数据特点:数据源包括哪些,平均单条记录大小
5、业务特点:有哪些排序要求,检索条件
6、资源复用:已有的硬件配置是怎样的,是否有升级计划

转载于:https://www.cnblogs.com/davidwang456/p/4744441.html

DIH增量、定时导入并检索数据--转载相关推荐

  1. Solr学习 DIH增量、定时导入并检索数据

    (一)引言: 前面我的文章 DIH全量导入 中已经学会了如何全量导入Oralce和MySQL的数据,大家都知道全量导入在数据量大的时候代价非常大,一般来说都会适用增量的方式来导入数据,下面介绍如何增量 ...

  2. 和solr的N天N夜(四)--增量、定时导入并检索数据

    一:引言 在上一章中导入数据的方式是全量导入,如果每次导入数据都是全量导入的话,首先是没必要,其次在海量数据下对服务器的压力也较大.所以合理的方式是更新索引采用定时增量更新. 二.修改数据库 在数据库 ...

  3. Solr初探(五)---Solr7.5利用DIH导入结构化数据构建索引

    才疏学浅,欢迎批评指正 Solr7.5利用DIH导入结构化数据构建索引 1.什么是DIH 2.使用DIH 3.使用DIH中遇到的一些问题 7.5利用DIH导入结构化数据构建索引 1.什么是DIH 按照 ...

  4. 关于sqoop增量导入oracle的数据到HDFS的出现的错误总结

    今天在将公司的oracle的数据抽取到hive当中,根据时间字段做增量插入,然后合并采用按照id唯一主键的方式进行合并操作. 下面的代码是增量导入的操作shell脚本 #!/bin/bash date ...

  5. Windows下Solr的安装与配置,附DIH全量导入MySQL数据、IK分词器配置详解——不用集成Tomcat

    Solr是Apache开源的比较稳定的一款全文搜索引擎,也是市面上相对比较流行的一款全文搜索引擎,好不好用你用过之后自有判断.今天给大家分享一下它的安装与配置,我用的是7.7.2版本.废话不多说,开搞 ...

  6. 第三章:Solr4.7以DIH的方式从数据库导数据

    实际工程应用中,从数据库导出数据创建索引再常见不过了,现在实验一下从数据库导入数据创建索引 一.版本说明 Solr版本:4.7.0 数据库:sqlserver2005 二.配置步骤 1. 准备的jar ...

  7. Sqoop2入门之导入关系型数据库数据到HDFS上(sqoop2-1.99.4版本)

    sqoop2-1.99.4和sqoop2-1.99.3版本操作略有不同:新版本中使用link代替了老版本的connection,其他使用类似. sqoop2-1.99.4环境搭建参见:Sqoop2环境 ...

  8. 定时发送服务器运行数据并设置阀值警报方法

    案例分析:笔者架设了公司整体的服务器系统监控系统,实现运行数据收集,筛选,报警的机制,采用了windows系统自带的性能监视器,但是在实施的过程中,遇到了一个问题:性能监视器无法对sql server ...

  9. 向线程传递数据与线程用回调方法检索数据

    用回调方法检索数据 /**//*用回调方法检索数据 下面的示例演示了一个从线程中检索数据的回调方法.包含数据和线程方法的类的构造函数也接受代表回调方法的委托: 在线程方法结束前,它调用该回调委托. * ...

最新文章

  1. 长文综述:从大数据中寻找复杂系统的核心变量
  2. 'htons' was not declared in this scope 解决
  3. ABAP常用字符串操作收集整理
  4. Ubuntu18系统安装使用Nginx
  5. 【Java方法】统计数组内不同元素个数及每个元素的数量
  6. 面向对象8:继承性、Object类的理解、写项目经验、debug经验
  7. 在IDEA中编辑struts国际化properties文件
  8. PID调控公式和相关方法
  9. 软考(软件设计师)考点总结 -- 信息安全分析与设计
  10. QQ邮箱服务器协议,QQ邮箱新功能 IMAP协议支持
  11. 黑客攻防与网络安全-N-0
  12. POE光纤收发器的三大应用场景
  13. 【Pandas入门教程】如何读取和写入表格数据
  14. 我奋斗了十八年才和你坐在一起喝咖啡
  15. 数字领航 科技赋能 | 优锘科技与新华三强强联手加速智慧医院可视化进程!ThingJS
  16. I2C详解学习 - nRF52832蓝牙芯片 TWI-I2C学习详解笔记
  17. TCP/IP三次握手 四次挥手
  18. windows上在python玩耍深度学习资源合集
  19. CSS 制作烟雾效果文字
  20. SSL P1597 石子合并问题 题目

热门文章

  1. vscode怎么运行android项目,windows + flutter +android+ vscode 安装配置运行流程(详细版本)...
  2. matlab axis坐标轴相关设置详解
  3. 数据结构课设—图型结构题目—行车路线
  4. linux内核工程导论,Linux内核工程导论–网络:TCP:netlink与tcp_diag编程
  5. 荣之学教育简述Shopee虾皮账号被冻结,最常见的2种原因
  6. 先验分布、后验分布、似然函数
  7. <Android开发> Android vold - 第三篇 vold 的NetLinkManager类简介
  8. 软件定义网络 Software Defined Network (一)概述
  9. oracle数据类型和Java类型之间的映射关系
  10. selenium打开chrome浏览器无痕模式