增量更新须要配置个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查询出这些记录的所有内容