Solr5.0.0 DIH之增量索引

定時索引相關知識

增量更新須要配置個sql(deltaImportQuery、deltaQuery)sql

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更新一個導入時間標誌,我本地截圖以下:spa

 

這個配置文件裏的屬性對象能夠在db-data-config.xml裏以${}佔位符方式填充數值。code


重點1:因此在執行deltaQuery時,只會導入數據知足爲:modify_date > '${dataimporter.last_index_time}',以此實現增量導入。不然就是全量導入!!!
重點2:在deltaImportQuery語句中,select字段必定要加上你想更新到索引的字段,不然默認不導入爲索引!!xml

 

 

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 必須一致爲表中的字段blog

5 爲固定寫法索引

 

'${dataimporter.last_index_time}'.
由於solr每次在全量導入時或者增量導入結束時,都會在core\conf\dataimport.properties文件中爲每個entity更新一個導入時間標誌,it

 這個配置文件裏的屬性對象能夠在db-data-config.xml裏以${}佔位符方式填充數值。ast

deltaQuery語句就是查詢出來上次建立索引以後數據庫發生變化的數據不包含刪除的ID

注意deltaQuery語句返回的僅僅是發生變化的數據的ID,deltaImportQuery語句則是根據deltaQuery語句返回的ID查詢出這些記錄的所有內容

相關文章
相關標籤/搜索