Apache Solr 是基於 Lucene 的企業級全文搜尋伺服器,提供豐富查詢語言、分散式索引、管理介面。本文記錄在 Solr 4.9 環境下,透過 DataImportHandler 實現 MySQL 資料全量同步的完整步驟,含 JDK、Solr 安裝、驅動配置、Schema 定義、資料源設定與匯入驗證。
Solr 4.9 需 Java 7 或以上版本,確認 java -version 輸出符合需求。
# 解壓後進入 example 目錄
cd SOLR_HOME/example
java -jar start.jar
預設埠 8983,瀏覽器訪問 https://localhost:8983/solr 見到管理介面即啟動成功。

下載 mysql-connector-java-x.x.x.jar 放入:
{SOLR_HOME}/contrib/dataimporthandler/lib/

檔案位置:{solr_home}/example/solr/collection1/conf/solrconfig.xml
在 <lib> 區段加入:
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
<lib dir="../../../contrib/dataimporthandler/lib/" regex="mysql-connector-java-\d.*\.jar" />

在同一檔案加入:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>

位置同 solrconfig.xml,依資料庫欄位對應定義 <field> 與 <fieldType>。

放在 conf/ 目錄下:
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/exercise"
user="root"
password=""
batchSize="-1" />
<document>
<entity name="customerinfo"
query="select customerID, customerName, PID, telephone from customerinfo">
<field column="customerID" name="id" />
<field column="customerID" name="customerID" />
<field column="customerName" name="customerName" />
<field column="PID" name="PID" />
<field column="telephone" name="telephone" />
</entity>
</document>
</dataConfig>
關鍵參數:
batchSize="-1":一次性讀取所有資料,避免記憶體溢出視資料量調整entity name 對應 Solr 文件,query 為 SQL 查詢語句field 映射:column 為資料庫欄位,name 為 Schema 定義欄位

collection1 → Dataimportcustomerinfo

完成後顯示 Indexing completed:

切換到 Query 分頁,輸入查詢條件(如 q=*:* 或指定欄位),執行驗證資料已建立索引:

data-config.xml 加入 deltaQuery、deltaImportQuery、parentDeltaQuery,配合 last_index_time 實現定時增量同步entity 並行,或使用 DataImportHandler 多執行緒完成上述步驟,MySQL 業務資料即可無縫同步至 Solr,賦予系統毫秒級全文搜尋與面向欄位過濾能力。