zoukankan      html  css  js  c++  java
  • 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每次在全量导入时或者增量导入结束时,都会在solrhomeconfdataimport.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每次在全量导入时或者增量导入结束时,都会在coreconfdataimport.properties文件中为每一个entity更新一个导入时间标志,

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

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

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

  • 相关阅读:
    LeetCode 326. Power of Three
    LeetCode 324. Wiggle Sort II
    LeetCode 322. Coin Change
    LeetCode 321. Create Maximum Number
    LeetCode 319. Bulb Switcher
    LeetCode 318. Maximum Product of Word Lengths
    LeetCode 310. Minimum Height Trees (DFS)
    个人站点大开发!--起始篇
    LeetCode 313. Super Ugly Number
    LeetCode 309. Best Time to Buy and Sell Stock with Cooldown (DP)
  • 原文地址:https://www.cnblogs.com/miye/p/8618667.html
Copyright © 2011-2022 走看看