(一)引言:
前面我的文章 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文件的配置内容如下:

  1. <dataConfig>
  2. <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="passok" />
  3. <document>
  4. <entity name="userInfo" pk="UserID"
  5. query="SELECT * FROM userinfo"
  6. deltaImportQuery="SELECT * FROM userinfo where UserID='${dih.delta.UserID}'"
  7. deltaQuery="SELECT UserID FROM userinfo where UpdateTime > '${dataimporter.last_index_time}'">
  8. <field column="UserID" name="id"/>
  9. <field column="UserName" name="userName"/>
  10. <field column="UserAge" name="userAge"/>
  11. <field column="UpdateTime" name="updateTime"/>
  12. </entity>
  13. </document>
  14. </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语句插入一条数据:

  1. INSERT INTO `test`.`userinfo`
  2. (`UserID`,
  3. `UserName`,
  4. `UserAge`)
  5. VALUES
  6. (6,
  7. '季义钦增量数据测试',
  8. 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>元素添加一个子元素

  1. <listener>
  2. <listener-class>
  3. org.apache.solr.handler.dataimport.scheduler.ApplicationListener
  4. </listener-class>
  5. </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、资源复用:已有的硬件配置是怎样的,是否有升级计划

Solr学习多表导入
(一)导入两张表,不相关:

新建一张新表,同样要有UpdateTime字段:

在data-config.xml文件中增加这个表的entity配置:

<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>  <!-- 新加的entity -->  <entity name="myArticle" pk="AID"
query="SELECT * FROM article"
deltaImportQuery="SELECT * FROM article where AID='${dih.delta.AID}'"
deltaQuery="SELECT AID FROM article where UpdateTime > '${dataimporter.last_index_time}'">  <field column="AID" name="id"/>   <field column="ArTitle" name="arTitle"/>   <field column="UpdateTime" name="updateTime"/>  </entity>  </document>
</dataConfig>  

在schema,xml文件中增加想要索引的列的配置:

<!-- ===========jiyiqin add====================== -->
<field name="userName" type="text_general" indexed="true" stored="true" />
<field name="userAge" type="int" indexed="true" stored="true" />
<field name="updateTime" type="date" indexed="true" stored="true" />
<field name="arTitle" type="text_general" indexed="true" stored="true" />

就这样启动tomcat服务器,就会自动增量导入Article这个表的数据并为ArTitle这列建立索引了。

Solr学习 DIH增量、定时导入并检索数据相关推荐

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

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

  2. DIH增量、定时导入并检索数据--转载

    原文地址: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%8 ...

  3. solr使用网页浏览器批量导入数据库中数据(本案例是mysql)

    如果想要知道如何安装solr,集成IKAnalyzer中文分词器,批量导入数据库数据,java使用参照以下本博主博文: 安装solr https://blog.csdn.net/u013294097/ ...

  4. 数据库SQL语句学习笔记(3)-排序检索数据

    1.排序数据 如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序.但是如果数据随后进行过更新或删除,这个顺序就会受到DBMS重用回收存储空间的方式的影响. 子句:S ...

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

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

  6. solr mysql 导入命令_Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)

    1 加入数据导入处理器的jar包 复制Solr解压后dist目录中的:solr-dataimporthandler-4.10.4.jar; 粘贴到contrib/dataimporthandler/l ...

  7. solr 通过DIH方式导入创建索引

    在我们solr 服务中,当我们系统相同过solr服务进行索引创建时我们可以通过DIH的方式进行全量导入创建索引和增量导入创建索引,那么下面简单介绍下DIH导入的具体步骤: 1.根据我们创建的业务表在我 ...

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

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

  9. Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)

    目录 1 加入数据导入处理器的jar包 2 加入数据库驱动包 3 配置solrconfig.xml文件 3.1 配置lib标签 - 加入驱动jar包 3.2 配置requestHandler标签 - ...

最新文章

  1. linux下文件以及目录权限修改(摘抄)
  2. 高阶函数(Higher-order function)
  3. 【BZOJ-1952】城市规划 [坑题] 仙人掌DP + 最大点权独立集(改)
  4. 宏的高级使用--##,__VA_ARGS__, __FILE__, __FUNCTION__等
  5. python之修改pip为豆瓣源
  6. 关于IIS中Request.ServerVariables(SCRIPT_NAME)的bug
  7. 定编定岗定员方案_定岗、定编、定员实施方案  (讨论稿)
  8. 中职计算机ps教案ppt,photoshop课件ppt
  9. 快商通AI智能客服机器人,荣获中国科学院《互联网周刊》重磅荣誉!
  10. 图标显示方框问题的一种原因
  11. MATLAB Symbolic Math Toolbox
  12. 将svn diff改成用vimdiff命令进行可视化差异显示
  13. 给FLASH加链接的方法
  14. 安笙机器人_【D~小说】《安妻》 BY 李晓雾 (机甲,穿越)
  15. Day-1 货仓选址(绝对值不等式)
  16. 新版标准日本语中级_第二十二课
  17. 用库文件操作EXCEL表格练习2
  18. 开源协议介绍(GPL,LGPL,BSD,MIT,Apache)
  19. 【java毕业设计】基于javaEE+SSH+SqlServer的商品供应管理系统设计与实现(毕业论文+程序源码)——商品供应管理系统
  20. 3D建模教程讲解!3ds Max电吉他制作

热门文章

  1. 在标准ASCII码表中,已知英文字母K的十六进制码值是4B,则二进制ASCII码1001000对应的字符是( )
  2. 如何进行移动端页面开发
  3. linux 命令行获取时间,【Linux】让命令提示符显示日期和时间
  4. 高数 | 【概念剖析】多元函数的偏导数、方向导数、梯度以及微分之间的关系
  5. java编程中对大数据的处理
  6. 高级计算机工程师查询,高级工程师证书查询网站
  7. Windows Shellcode开发[2]
  8. 未能找到下列包文件: C:\Users\Administrator\Desktop\DotNetFX40\dotNetFx40LP_Full_x86_x64zh-Hans.exe
  9. android app启动失败,Android应用App启动白屏(黑屏)问题解决
  10. Linux运维:推荐八款Linux远程连接工具