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

  • 相关阅读:
    webService 的使用
    前端框架——树形结构Ztree的使用
    vue使用问题总结(长期更新)
    yum安装配置MySQL数据库
    kworkerds挖矿木马
    zabbix 中文乱码
    GIT 仓库的搭建
    ELK 收集交换机日志(以华为交换机为例)
    Zabbix 邮箱告警(Python脚本)
    Tomcat8性能优化
  • 原文地址:https://www.cnblogs.com/miye/p/8618667.html
Copyright © 2020-2023  润新知