增量更新須要配置個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負責刪除 數據庫中記錄爲刪除 的數據的索引
<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>
<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查詢出這些記錄的所有內容