這篇文章小蛙要記錄怎麼樣新建一個 Core 並且也加入 DataImportHandler 的方法。

其他相關 Solr 系列文章請參考:
Solr 教學 (1) – 安裝篇
Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面
Solr 教學 (3) – 以 Remote Address Filter 限制存取
Solr 教學 (4) – 使用 DataImport 匯入資料庫資料
上一篇記錄了怎麼透過 DataImportHandler 來將 MySQL 的資料匯入到 Solr 中,剛詢問了同事,一個 Core 可以大概看成資料庫中的一個 table,所以要匯入兩個不相關的 table 要用兩個 Core,雖然網路上好像有人提到可以將兩個不相干的 table 匯入到一個 Core 中,不過小蛙的 table 不多,就用簡單的做法就好。
小蛙的 index 環境是在 /opt/solr/example,最快的方法是直接把 example 資料夾複製一個新的並且改名字,這邊小蛙想要有一個 news 的 core, 使用自己建立必要資料夾的方法,建立以下資料夾

/opt/solr/news/
/opt/solr/news/conf
/opt/solr/news/data

再將原本 /opt/solr/example/conf/ 下的 db-data-config.xml, schema.xml, solrconfig.xml 這三個檔案複製到 /opt/solr/news/conf/ 目錄中。
接著修改 /opt/solr/solr.xml,加入新的 core

<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
    <cores adminPath="/admin/cores">
        <core name="example" instanceDir="example" />
        <core name="News" instanceDir="news" />
        ...
    </cores>
</solr>

重新啟動 tomcat。小蛙在這邊就遇到很多錯誤,因為資料夾是用 root 權限建立的,而 solr 並沒有這樣的權限可以存取,所以這邊要注意把 /opt/solr/news 下的檔案擁有權都改成 tomcat7 (看 tomcat user 叫什麼就改成那個)。
第二個要注意的事情是一切正常運作後,點選到 DataImport 頁面開始運行時,卻出現下面的錯誤

org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: select * from news Processing Document # 1
...
Caused by: java.sql.SQLException: Illegal value for setFetchSize().
...

參考資料 1,2 中提到在 db-data-config.xml 中的 <dataSource 加上 batchSize=”-1″ 就可以解決這個問題囉!

參考資料:

  1. Solr – User – problem on running fullimport
    http://lucene.472066.n3.nabble.com/problem-on-running-fullimport-td1707206.html
  2. DataImportHandler – Solr Wiki
    http://wiki.apache.org/solr/DataImportHandler#Configuring_JdbcDataSource

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *