您的位置:首页 > 产品设计 > UI/UE

Solr4.* Solr5.* 增量更新

2015-03-19 00:00 274 查看
摘要: 基于Solr4.* Solr5.*实现增量更新时的经验总结,包括对solr执行增量更新的流程的理解。

前提:

a、基于Solr 4.10.3的Solr-cloud,部署在linux操作系统,Tomcat 8容器中;

b、在使用solr,对solr有了解。

最近在做一个基于Solr的全文检索的功能,在实现增量更新的时候碰到了一些问题,总结下来供参考。

实现增量更新的关键是solr的db-data-config.xml(名称可能不同,此处是solr官方example中的名称)的配置,如下:

entity的query属性是全量更新时需要用到的;

SQL:比较典型的可能没有条件语句

entity的deltaImportQuery属性是增量更新时导入数据用的,如果没有这个属性,则执行query属性中的sql,为了结果集更准确,deltaImportQuery是增量更新必备的;

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

附:参考文档

1、solr官方文档

2、http://zzstudy.offcn.com/archives/8104

3、http://eksliang.iteye.com/blog/2097146
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息