Solr5.0.0 DIH之增量索引

定时索引相关知识

增量更新需要配置个sql(deltaImportQuery、deltaQuery)

deltaImportQuery="select * where id='${dih.delta.id}'"
deltaQuery="select id from book_dept where modify_time > '${dih.last_index_time}'"
deletedPkQuery="SELECT id FROM book_dept WHERE deleteStatus = 2 "

 

增量导入注意事项

大家可以看到在上图中,entity标签里,deltaImportQuery属性的select语句与deltaQuery属性的select语句是不一样的,差异在于多了一个

where modify_date > '${dataimporter.last_index_time}'.

 

这是因为solr每次在全量导入时或者增量导入结束时,都会在solrhome\conf\dataimport.properties文件中为每一个entity更新一个导入时间标志,我本地截图如下:

 

这个配置文件里的属性对象可以在db-data-config.xml里以${}占位符方式填充数值。


重点1:所以在执行deltaQuery时,只会导入数据满足为:modify_date > '${dataimporter.last_index_time}',以此实现增量导入。否则就是全量导入!!!
重点2:在deltaImportQuery语句中,select字段一定要加上你想更新到索引的字段,否则默认不导入为索引!!

 

 

deltaQuery语句查出所有被修改的数据的ID
deltaImportQuery对deltaQuery查出来的ID的数据进行索引更新
deletedPkQuery负责删除 数据库中记录为删除 的数据的索引
 

修改示例 

1 在建成全量索引的前提之下修改data-config.xml    增加 deltaImportQuery和deltaQuery

<entity name="bookInfo" pk="BOOK_ID"
query="SELECT 
    BOOK_ID,
    BOOK_NAME,
    UPDATE_DATE
    from
    EL.T_BOOK"

deltaImportQuery="select BOOK_ID,BOOK_NAME from EL.T_BOOK where BOOK_ID = '${dataimporter.delta.BOOK_ID}'" 

deltaQuery="select BOOK_ID from EL.T_BOOK where to_char(UPDATE_DATE,'yyyy-mm-dd hh24:mm:ss') > '${dataimporter.last_index_time}'" 
>    
 

<field column="BOOK_ID" name="id"/>
<field column="BOOK_NAME" name="bookName"/>


</entity>

 

2 在建成全量索引的前提之下修改data-config.xml在data-config.xml中增加 deltaImportQuery和deltaQuery

<entity name="bookInfo" pk="BOOK_ID"
  query="SELECT 
    BOOK_ID,
    BOOK_NAME,
    UPDATE_DATE
    from
    EL.T_BOOK"

  deltaImportQuery="select BOOK_ID,
            BOOK_NAME from EL.T_BOOK where BOOK_ID = '${dataimporter.delta.BOOK_ID}'" 

  deltaQuery="select BOOK_ID from EL.T_BOOK 
  where to_char(UPDATE_DATE,'yyyy-mm-dd hh24:mm:ss') > '${dataimporter.last_index_time}'" 
  >    
 
  <field column="BOOK_ID" name="id"/>
  <field column="BOOK_NAME" name="bookName"/>
</entity>

 

 

1 中只查ID

2 4 必须一致为表中的字段

5 为固定写法

 

'${dataimporter.last_index_time}'.
因为solr每次在全量导入时或者增量导入结束时,都会在core\conf\dataimport.properties文件中为每一个entity更新一个导入时间标志,

 这个配置文件里的属性对象可以在db-data-config.xml里以${}占位符方式填充数值。

deltaQuery语句就是查询出来上次创建索引之后数据库发生变化的数据不包含删除的ID

注意deltaQuery语句返回的仅仅是发生变化的数据的ID,deltaImportQuery语句则是根据deltaQuery语句返回的ID查询出这些记录的全部内容

 

posted @ 2018-03-21 18:03  wdmiye  阅读(332)  评论(0编辑  收藏  举报