好一陣子沒有用 Solr,接續前幾篇

Solr 教學 (1) – 安裝篇
Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面
Solr 教學 (3) – 以 Remote Address Filter 限制存取

這篇文章要記錄一下怎麼把 MySQL 裡面的資料匯入成 Solr 的索引檔。

小蛙從參考資料1中發現匯入的動作好像不困難,就照著做下來,這邊也順便記錄一下可能會遇到的問題。

  1. 修改 solrconfig.xml,這個是前幾篇提到 core 下面的,小蛙的目錄是 /opt/solr/example/conf,這邊 db-data-config.xml 可以改成自己想要的名字,也可以直接使用相對路徑,考慮可能會有移機的狀況,還是盡可能使用相對路徑。
    <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
      <lst name="defaults">
        <str name="config">db-data-config.xml</str>
      </lst>
    </requestHandler>
  2. 新增資料庫連線檔 db-data-config.xml,這個檔名是上面自己設定的,跟 solrconfig.xml 放在同一個目錄下即可。依自己的環境修改 url, user, password,以及 SQL 語法及欄位對應,這邊的 field name 是資料庫的欄位。
    <dataConfig>
      <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="myusername" password="mypassword"/>
        <document name="mydocument">
          <entity name="item" query="SELECT * FROM stockTable">
            <field column="ID" name="id" />
            <field column="SNO" name="no" />
            <field column="SNAME" name="name" />
            <field column="STYPE" name="type" />
          </entity>
      </document>
    </dataConfig>
  3. 修改 schema.xml,改成自己的設定
    <?xml version="1.0" ?>
    <!--
     Licensed to the Apache Software Foundation (ASF) under one or more
     contributor license agreements. See the NOTICE file distributed with
     this work for additional information regarding copyright ownership.
     The ASF licenses this file to You under the Apache License, Version 2.0
     (the "License"); you may not use this file except in compliance with
     the License. You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
    Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
    -->
    <schema name="example core zero" version="1.1">
      <types>
        <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
        <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
      </types>
      <fields>
        <!-- general -->
        <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
        <field name="no" type="string" indexed="true" stored="true" multiValued="false" />
        <field name="name" type="string" indexed="true" stored="true" multiValued="false" />
        <field name="type" type="string" indexed="true" stored="true" multiValued="false" />
        <!-- 這個 _version_ 如果拿掉會報錯 -->
        <field name="_version_" type="long" indexed="true" stored="true"/>
      </fields>
      <!-- 主鍵 -->
      <uniqueKey>id</uniqueKey>
      <!-- 沒有設定欄位時的預設搜尋 -->
      <defaultSearchField>name</defaultSearchField>
      <!-- 空白串接關鍵字時預設使用 OR 或是 AND -->
      <solrQueryParser defaultOperator="OR"/>
    </schema>
  4. 這時候因為連結的是 MySQL,所以需要 mysql connector,假設使用的是 oracle 就要下載 ojdbc 來使用,MySQL Connector/J 到 MySQL 官網下載。選擇 Platform Independent 後下載壓縮檔,解壓縮後只需要裡面的 mysql-connector-java-x.x.xx-bin.jar 這個檔案,把這個檔案放在 solr lib 目錄下,以小蛙的環境為例,是直接放在 /var/lib/tomcat7/webapps/solr/WEB-INF/lib 目錄下,當 tomcat 啟動 solr 專案時就會自動被載入。
  5. 到這邊似乎都沒問題,在小蛙準備要重新啟動 tomcat 讓設定生效的時候,卻一直出現這樣子的錯誤
    org.apache.solr.common.SolrException: RequestHandler init failure
    ...
    Caused by: org.apache.solr.common.SolrException: RequestHandler init failure
    ...
    Caused by: org.apache.solr.common.SolrException: Error loading class 'org.apache.solr.handler.dataimport.DataImportHandler'
    ...
    Caused by: java.lang.ClassNotFoundException: org.apache.solr.handler.dataimport.DataImportHandler
    ...

    錯誤真的要看清楚,小蛙當時只有看到前三個,一直以為是設定檔哪裡出錯,一個一個找了好久,才發現第四個錯誤 java.lang.ClassNotFoundException,上面這些錯誤都是因為根本找不到 org.apache.solr.handler.dataimport.DataImportHandler 引起的,在網路上搜尋了一下,有一些網友分享這個檔案存在於下載回來 solr 的 dist 目錄中,可以透過在 solrconfig.xml 中設定 lib 的讀取路徑,小蛙則是把 solr-dataimporthandler-4.5.0.jar, solr-dataimporthandler-extras-4.5.0.jar 這兩個 jar 直接複製到 /var/lib/tomcat7/webapps/solr/WEB-INF/lib 目錄中。

  6. 重新啟動 tomcat 後,solr 畫面可以正常進入,左邊 Core Selector 下拉選單選到自己的 Core 後再選擇 DataImport,
    // full-import : 全部匯入;delta-import : 只匯入變更部分
    Command -> full-import
    
    // verbose 打勾可以看到詳細訊息
    v Verbose 
    
    // 選擇剛剛設定檔新增的名稱
    Entity -> item
    
    執行 Execute

    完成後可以看到「Indexing completed. Added/Updated: 12701 documents. Deleted 0 documents. (Duration: 14s)

  7. 大功告成!檢查看看是否正常匯入,點選左邊的 Query,測試 Execute Query 看看資料正不正確。

參考資料:

  1. [Solr] Solr 學習筆記(五) 設定 Data Import Handler 直接從 MySQL 把資料匯入 @ 長島冰茶的工程師筆記
    http://wbkuo.pixnet.net/blog/post/156125771-%5Bsolr%5D-solr-%E5%AD%B8%E7%BF%92%E7%AD%86%E8%A8%98(%E4%BA%94)-%E8%A8%AD%E5%AE%9A-data-import-handler-%E7%9B%B4
相關文章

Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測

接續前幾篇教學,我們已經建置好 Vuforia 開發及執行環境
2014-12-09 17:10:57
hans

18

[參考文章] 使用 Git 做為網站開發版本控管工具

使用 Git 做為版本控管非常好用,網路上有很多 Git 教學文:
2013-01-02 17:20:24
hans

18

使用 VPN 從 Play Store 下載收費軟體 (免 root)

(2013-03-20 更新) 現在台灣的 Play Store 也可以購買付費軟體囉! Google Play Store 在台灣是沒有辦法購買付費軟體的,除非軟體本身提供 Google Play In-app Billing,
2012-12-27 00:02:17
hans

18

Picasa 3教學 – 免費相簿的基本介紹與使用方式

說到Google相簿 - Google Picasa
2012-03-11 14:57:55
hans

18

小米系統(MIUI ROM)使用心得

小蛙從幾個月前接觸了小米系統(MIUI ROM)之後,就深深的
2012-02-18 13:38:56
hans

18

crontab -e相關使用及問題

(2012-02-18更新)小蛙打算在「
2012-02-15 21:39:13
hans

18

Android權限列表(Manifest.permission)及使用者疑慮

小蛙在「
2012-02-15 19:50:50
hans

18

Android使用Facebook SDK(申請篇)

Facebook在每個人的生活中占的比例已經越來越高,有很多不論是網站或是APP為了達到分享及快速散步的目的而紛紛加入「分享到Facebook」的功能(好玩的東西當然要跟FB上面的好朋友分享囉!),這篇文章記錄怎麼申請Facebook AP
2012-02-03 20:30:24
hans

18

onSaveInstanceState, onRestoreInstanceState使用

這篇文章要記錄onSaveInstanceState以及
2012-01-18 19:00:10
hans

18

使用FancyBox燈箱效果呈現圖片,無法顯示圖片

小蛙的最近一個工作中,要讓使用者點了縮圖之後可以透過燈箱效果開啟大圖並且上下頁切換,之前小蛙試過很多種燈箱效果套件,舉凡是colorbox, fancybox, lightbox, thinbox, thickbox, greybox ..
2011-12-28 12:15:05
hans

18




 回覆

你可以使用以下語法 HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="">

(required)

(required)

   
© 2012 蛙齋 Suffusion theme by Sayontan Sinha