增量导入数据——DeltaImport

在之前《DIH——QuickStart》中,用的是full-import,也就是将数据库表中所有的数据到导入solr中,但是在数据量很大的时候这种方式导入数据就会很慢,尤其是在新增的数据相对于原来的数据来说很少的时候。Solr提供了一种增量导入数据的方式——DeltaImport,现在来学习一下怎么样实现增量导入。
  
  在数据库表中增加一列last_modified(timestamp类型),用来记录数据添加/更新时间:

在数据库表中新增一列

然后再在数据库中增加两条数据:
  


修改data-config.xml

<dataConfig>
  <dataSource type="JdbcDataSource" 
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/test" 
              user=xxxx 
              password=xxxx/>
  <document>
    <entity name="news" pk="id" 
            query="select * from news"
            deltaImportQuery="select * from news where id='${dih.delta.id}'"
            deltaQuery="select id from news where last_modified > '${dih.last_index_time}'">
    </entity>
  </document>
</dataConfig>

然后在solr admin界面中,执行Dataimport->delta-import就可以了,这里不要选择clean,否则之前的索引都会被删除:

执行delta-import

从右边的状态可以看到成功添加了两个文档,再查询中就可以看到新加的两行内容了:
  


查询到新内容

Delta-import步骤:

首先按照query指定的语句查询出符合条件的记录。
  然后从这些数据中根据deltaQuery指定的SQL语句查询出所有需要增量导入的数据的ID号。
  根据deltaImportQuery指定的SQL语句返回所有这些ID的数据,即本次增量导入要处理得数据。

在conf文件夹下有个dataimport.properties文件,用来记录每个表(entity)索引最后更新的时间。

person.last_index_time=2016-08-10 01:44:33
item.last_index_time=2016-08-11 05:33:11
last_index_time=2016-08-11 07:16:11
news.last_index_time=2016-08-11 07:16:11

在full-import或者delta-import之后,就会更新这个文件里面的值。执行delta-import的时候,通过内置变量${dih.last_index_time}获得这个文件中的最近一次索引的时间,与相应表中的last_modified列作比较,如果在last_index_time之后的行,就导入。

Solr时区问题:

Solr默认采用的是协调世界时UTC,而数据库中的是本地时间(UTC+8),如果这两个时间表示方式不一致的话会导致增量导入的数据错误.
  在solr.in.sh中修改solr_timezone为“Asia/Shanghai”或者"UTC+8"好像不起作用,所以只能采用下面的方法:
  因为中国时区比UTC多八个小时,所以可以在deltaQuery的时候给last_index_time加上8:

  deltaQuery="select id from news where last_modified >'${dih.last_index_time}+8'"

参考资料:
[1] https://wiki.apache.org/solr/DataImportHandler
[2] http://www.aboutyun.com/thread-10496-1-1.html

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • solr 数据同步,全量、增量方式 DIH全量同步(全表数据)(一般做第一次数据同步) 首先创建对应的数据库表 s...
    逐暗者阅读 15,517评论 1赞 26
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,282评论 19赞 139
  • 两年前用过solr5.1版本的,当时只是简单入个门,拿来在项目里建个全文索引,然后再query,其他什么也没做,还...
    Coselding阅读 3,301评论 3赞 22
  •   Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Luc...
    缱绻离愁阅读 1,331评论 0赞 0
  • 七岁的时候,爸妈捎信来要莫等回家上一年级,她才得以回家。是啊,在姥姥家都已经好几年了,虽然两家离得也不远,...
    芊芊子轩阅读 341评论 6赞 2

友情链接更多精彩内容