前提:linux
a、基于Solr 4.10.3的Solr-cloud,部署在linux操做系统,Tomcat 8容器中;sql
b、在使用solr,对solr有了解。spa
最近在作一个基于Solr的全文检索的功能,在实现增量更新的时候碰到了一些问题,总结下来供参考。
操作系统
实现增量更新的关键是solr的db-data-config.xml(名称可能不一样,此处是solr官方example中的名称)的配置,以下:debug
entity的query属性是全量更新时须要用到的;日志
SQL:比较典型的可能没有条件语句
xml
entity的deltaImportQuery属性是增量更新时导入数据用的,若是没有这个属性,则执行query属性中的sql,为告终果集更准确,deltaImportQuery是增量更新必备的;blog
SQL:比较典型的应该包含 主键=dataimporter.delta.主键 的查询条件文档
entity的deltaQuery属性是也是增量更新时须要用到的,做用是获得须要更新到solr中的数据的主键,也就是给deltaImportQuery提供数据。部署
SQL:比较典型的应该包含 修改时间>${dataimporter.last_index_time} 的查询条件
以上是不包含子entity的状况,若是包含子entity,子entity中有如下不一样:
子entity中的deltaQuery中查询出来的结果,主要用于提供子表中变化的数据集给parentDeltaQuery,parentDeltaQuery的做用是根据deltaQuery提供的结果集,查询出主表受影响的结果集。
若是包含多个子entity,那么在增量更新时,会先经过子表的deltaQuery和parentDeltaQuery获得全部主表须要更新的数据集,而后执行主表的deltaQuery也获得一个须要更新的数据集,将这两个集合合并以后,再依次执行主entity的deltaImportQuery和子entity的deltaImportQuery,或者他们的query属性定义的sql。
注:只须要将solr的日志级别设置为debug就能够看到详细的日志输出了,有了日记分析增量更新的执行流程就很简单了 :D
附:参考文档
一、solr官方文档
二、http://zzstudy.offcn.com/archives/8104
三、http://eksliang.iteye.com/blog/2097146