Solr 全文檢索引擎,簡單擁有搜尋引擎 – Round 2 建立 core 從資料庫匯入

2015-10-25 Solr

在第一篇將 SOLR 安裝好後,再來就是要建立一個 SOLR core,這樣你才能建立 index、 Query

 

在這一篇將會教學如何建立 SOLR core、並且連結 MySQL 來匯入資料及查詢

 

SOLR 建立 core

使用 SOLR 工具來建立

由於是使用 solr 這個使用者來啟動,所以使用 su solr 的方式來建立

$ su solr -c '/opt/solr/bin/solr create -c shazi.info'

Setup new core instance directory:
/var/solr/data/shazi.info

Creating new core 'shazi.info' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=test2&instanceDir=shazi.info

{
  "responseHeader":{
    "status":0,
    "QTime":478},
  "core":"shazi.info"}

建立好的 core data 會放在 /var/solr/data/shazi.info

 

 

SOLR 從 MySQL 匯入資料

Step.1 要從 MySQL 匯入資料首先必須先到 MySQL 官網抓 mysql connector

ScreenShot 2015-10-25 03.46.35

 

Step.2 取得 mysql-connector-java-5.1.37.tar.gz 後,把裡面的 mysql-connector-java-5.1.37-bin.jar 提取出來並放到 SOLR 內載入

$ tar zxvf mysql-connector-java-5.1.37.tar.gz

#把 mysql-connector-java-5.1.37-bin.jar 丟到 shazi.info 內
$ mkdir /var/solr/data/shazi.info/lib
$ mv mysql-connector-java-5.1.37/mysql-connector-java-5.1.37-bin.jar /var/solr/data/shazi.info/lib/

 

 

Step.3 把 SOLR 範例 db 匯入設定檔複製到 core conf

$ cp -r /opt/solr/example/example-DIH/solr/db/conf/ /var/solr/data/shazi.info/conf/

 

 

Step.4 設定 solrconfig.xml

確認 db config 的名稱為 db-data-config.xml,待會我們要編輯他來設定 mysql connection

加入 mysql connector lib 的位置

$ cd /var/solr/data/shazi.info/conf/
$ vim solrconfig.xml

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  <lst name="defaults">
    <str name="config">db-data-config.xml</str>
  </lst>
</requestHandler>

<!-- 加入以下 lib 位置 -->
<lib dir="/opt/solr/dist" regex="solr-dataimporthandler-.*\.jar" />
<lib dir="/var/solr/data/shazi.info/lib" regex=".*\.jar" />

這邊建議可以使用相對路徑以防未來移機,小弟這邊使用絕對路徑是因為分配上的潔癖。

請記住一定要加入 lib 位置確認可以抓到 mysql-connector-java-5.1.37-bin.jar,否則接下來你的設定怎麼樣都抓不到 mysql 資料,前功盡棄。

 

 

Step.5 設定 db-data-config.xml

這隻設定檔是有關於設定 MySQL 資料庫位置以及匯入的資訊

$ vim db-data-config.xml

<dataConfig>
    <dataSource type="JdbcDataSource"
                driver="com.mysql.jdbc.Driver"
                url="jdbc:mysql://192.168.10.10:3306/solr"
                user="solr_USER"
                password="solr_PWD" />
    <document name ="shazi.info">
        <entity name="item"
                query="SELECT * FROM solr_tables">
            <field column="id" name="id" />
            <field column="typeid" name="typeid" />
            <field column="body" name="body" />
            <field column="name" name="name" />
        </entity>
    </document>
</dataConfig>
  • driver = 使用 mysql 驅動:com.mysql.jdbc.Driver
  • url = MYSQL 資料庫位置:jdbc:mysql://192.168.10.10:3306/solr
  • user = MYSQL資料庫使用者
  • password = MYSQL 資料庫密碼

 

資料匯入:

  1. 定義一個匯入項目 “item”
  2. 要匯入的資訊 “SELECT * FROM solr_tables”
  3. 定義欄位 “field”,必須要定義才撈的到資料。

 

 

Step..6 在 db-data-config.xml 設定好匯入資料後,還必須定義 tables schema。

$ vim schema.xml

<?xml version="1.0" ?>
<schema name="example core zero" version="1.1">

   <!-- schema type 屬性-->
   <types>
      <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
      <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
   </types> 

   <!-- schema 定義 -->
   <field>
      <field name="_version_" type="long" indexed="true" stored="true"/>
      <field name="id" type="string" indexed="true" stored="true"/>
      <field name="type" type="string" indexed="true" stored="true"/>
      <field name="body" type="long" indexed="true" stored="true"/>
      <field name="name" type="string" indexed="true" stored="true"/>
   </field>

   <!-- primary key -->
   <uniqueKey>id</uniqueKey>

   <!-- 無定義欄位時預設搜尋項目 -->
   <defaultSearchField>name</defaultSearchField>

   <!-- 空白串接使用 OR 或是 AND -->
   <solrQueryParser defaultOperator="OR"/>
</schema>

 

上述是一個標準 schema 的寫入方式,可以按照需求加入,solr 內建還有許多 schema type 可以從範例檔抓取新增。

 

 

如果你的 Step.5 , 6 都完成後,就可以到 SOLR Cloud 進行匯入測試

到 Dataimport 選好 Entity 為剛剛建立的 “item”,然後執行匯入”Exexute”

執行後 SOLR 不會自動更新狀態(不貼心),必須手動執行 “Refresh Status” 就可以看到匯入成功,並且有多少筆匯入成功

ScreenShot 2015-10-25 04.43.12

 

既然匯入成功了我們就到 Query 來驗證一下匯入的資料是否正確,有找到資料就代表匯入完成囉!!

 

現在支援 json、python、csv、xml、php、ruby,對於前端已經越來越友善了

 

 

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱