全量索引耗時長、資源佔用高,增量索引僅處理上次索引後的變更數據,是生產環境維護搜索引擎的標準做法。本文詳細講解「軟刪除」業務邏輯與定時任務自動化配置。
在業務表新增 `is_delete` 欄位(`int`,預設 0):
<dataConfig>
<dataSource .../>
<document>
<entity name="product" query="SELECT * FROM product WHERE is_delete=0"
deltaQuery="SELECT id FROM product WHERE is_delete=0 AND update_time > '${dataimporter.last_index_time}'"
deltaImportQuery="SELECT * FROM product WHERE id='${dataimporter.delta.id}'"
deletedPkQuery="SELECT id FROM product WHERE is_delete=1">
<field column="id" name="id"/>
<field column="name" name="name"/>
<field column="is_delete" name="is_delete"/>
</entity>
</document>
</dataConfig>
關鍵點解析:
<field name="is_delete" type="int" indexed="true" stored="true"/>
將兩條記錄的 `is_delete` 改為 1,執行增量索引後,Solr 索引數量減少 2,搜索該記錄無結果,證明軟刪除生效。
手動觸發增量索引效率低,Solr 提供 `apache-solr-dataimportscheduler` 實現定時自動化。
<listener> <listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class> </listener>
syncEnabled=1 syncCores=collection1 server=localhost port=8080 webapp=solr params=/dataimport?command=delta-import&clean=false&commit=true&wt=json&optimize=false interval=1 reBuildIndexInterval=7200 reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true reBuildIndexBeginTime=03:10:00
啟動 Tomcat,日誌出現定時執行 `delta-import` 成功信息即配置生效。