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查询出这些记录的全部内容

  • 相关阅读:
    Cstring 和 const char* , unicode和ANSI编码 的一个具体应用(转)
    引用 CTreeCtrl中用右键选中item并弹出菜单的方法(转)
    Android 开发人员必须掌握的 10 个开发工具
    关于在线程中使用AfxGetMainWnd()出错的问题,终于找到了
    MFC CListCtrl的用法.Style/插入、删除、选中数据及排序问题等(转)
    vc++ 中的匈牙利变量表示法
    Android模拟器安装程序及上传音乐并播放
    关于CString总结(转)
    MSSQL优化之————探索MSSQL执行计划(转)
    抓虫系列(三) 不要轻视web程序中常用的三个"池" 之数据库连接池
  • 原文地址:https://www.cnblogs.com/miye/p/8618667.html
Copyright © 2011-2022 走看看