首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Solr 增量索引實戰:軟刪除策略與定時自動更新配置全攻略

     編輯:Java 綜合教學

Solr 增量索引核心:捕獲資料庫變更,局部更新索引

全量索引耗時長、資源佔用高,增量索引僅處理上次索引後的變更數據,是生產環境維護搜索引擎的標準做法。本文詳細講解「軟刪除」業務邏輯與定時任務自動化配置。

一、增量索引之軟刪除實現

1.1 資料庫新增標識欄位

在業務表新增 `is_delete` 欄位(`int`,預設 0):

  • `0` = 正常數據,參與索引建立/更新。
  • `1` = 軟刪除標記,增量索引時從 Solr 移除對應文檔。

1.2 修改 `data-config.xml` 關鍵配置

<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>

關鍵點解析:

  • `query`:全量/增量導入時的基礎查詢,過濾掉已軟刪除數據。
  • `deltaQuery`:增量索引時,查找變更的 ID(新增/修改)。
  • `deletedPkQuery`:核心,查找所有軟刪除的 ID,Solr 會根據這些 ID 從索引中刪除文檔。
  • `deltaImportQuery`:根據 ID 獲取完整文檔數據(用於新增/更新)。

1.3 `schema.xml` 新增欄位

<field name="is_delete" type="int" indexed="true" stored="true"/>

1.4 效果驗證

將兩條記錄的 `is_delete` 改為 1,執行增量索引後,Solr 索引數量減少 2,搜索該記錄無結果,證明軟刪除生效。

二、定時增量索引:DataImportScheduler 配置詳解

手動觸發增量索引效率低,Solr 提供 `apache-solr-dataimportscheduler` 實現定時自動化。

核心步驟

  1. 引入修正版 JAR:官方版本存在 HTTP 415 錯誤(POST/GET 不匹配),需使用修改源碼後的 JAR(參考 修復指南)。
  2. 配置 `web.xml` 註冊監聽器:
    <listener>
      <listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
    </listener>
  3. 放置 `dataimport.properties` 到 `$SOLR_HOME/conf/`(非 core 目錄下的 conf)。
  4. 關鍵屬性配置:
    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

參數說明

  • `interval`:增量索引間隔(分鐘),生產建議 5-30 分鐘視業務量而定。
  • `reBuildIndexInterval`:全量重建間隔(分鐘),預設 7200(1 天),修正索引碎片與數據一致性。
  • `reBuildIndexBeginTime`:首次全量重建時間,避開業務高峰期。

啟動驗證

啟動 Tomcat,日誌出現定時執行 `delta-import` 成功信息即配置生效。

生產環境建議

  1. 軟刪除欄位建議加索引,提升 `deletedPkQuery` 性能。
  2. 增量索引間隔與業務實時性要求平衡,避免過頻繁導致 Solr 負載過高。
  3. 定期全量重建配合 `optimize=true` 合併段文件,提升查詢性能。
  4. 監控 Solr 日誌與 JMX 指標,設置告警機制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved