CentOS MySQL Solr

從零開始的Solr建置-CentOS架設、MySQL匯入資料、查詢

符興智 Felix Fu 2020/10/05 09:57:53
5611

Solr 介紹

 

Solr是基於Lucene的流行、高效能的開源企業級搜尋平臺。
可以通過http協議將文件以JSON/XML/CSV/binary格式傳送給Solr進行索引
並通過http GET 請求進行查詢,返回JSON/XML/CSV/binary格式的搜尋結果。
內建了綜合的管理使用者介面,且釋出了許多定義良好的擴充套件點,這使得外掛很容易輔助索引建立與查詢。

一、 安裝JAVA

首先Solr是使用java運行的,我們先在CentOS上安裝Java,這裡使用open jdk 8。

yum install java-8-openjdk

安裝完成後,可透過檢查版本驗證是安裝成功。

java -version

 

二、 下載Solr並安裝

直接使用指令從Solr官網抓取壓縮檔,本文使用Solr 7作為範例。

wget http://ftp.tc.edu.tw/pub/Apache/lucene/solr/7.7.3/solr-7.7.3.tgz

下載完成後,將安裝腳本解壓縮出來

tar xzf solr-7.7.3.tgz solr-7.7.3/bin/install_solr_service.sh --strip-components=2

接著執行安裝腳本

bash ./install_solr_service.sh solr-7.7.3.tgz

安裝完成後,因為Solr預設是使用8983 port,因此我們必須將防火牆的8983 port開啟。

firewall-cmd --permanent --add-port=8983/tcp

並重啟防火牆

firewall-cmd –reload

完成後就可以啟動Solr了。

service solr start

(可選擇步驟)將Solr設為開機時啟動

chkconfig solr on

可以使用此指令檢查Solr的當前執行狀態

service solr status

現在可以透過訪問Solr內建的管理頁面來檢視Solr狀態,到目前為止算是完成的Solr的安裝。

http://127.0.0.1:8983/solr/

三、建立核心

核心(Core)是Solr對資料集的代稱,不清楚核心概念的讀者,可以將其視為關聯式資料庫中的資料表,但兩者仍有差異。
我們先使用指令建立一個命名為CAR的核心,路徑可自定義。

su - solr -c "/opt/solr/bin/solr create -c CAR "

現在我們有了一個核心,但核心內還沒有任何資料,因此下一步要設定欲引入資料的來源資料庫。
請先開啟此路徑下的核心設定檔,加入Solr提供的資料匯入工具包solr-dataimporthandler-x.x.x.jar,並指定DB來源設定檔的存放路徑。

/var/solr/data/CAR/conf/solrconfig.xml

<lib dir="/opt/solr-7.7.3/dist/" regex="solr-dataimporthandler-.*\.jar" />
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
 	<lst name="defaults">
 	  <str name="config">/var/solr/data/CAR/conf/carDbSourse.xml</str>
	 </lst>
</requestHandler>

因為本文使用的是MySQL Database,因此必須在Solr的lib中加入MSQL的驅動
本文使用的驅動來源在此
驅動下載點

從中取出mysql-connector-java-x.x.x.jar放到/opt/solr-x.x.x/server/solr-webapp/webapp/WEB-INF/lib

接下來新增DB的設定檔/var/solr/data/CAR/conf/carDbSourse.xml

<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/dbname" 
  user="myusername" password="mypassword"/> 
  <document> 
    <entity name="car" query="select * from CAR_TABLE"> 
	<field column="NAME" name="NAME" />
	<field column="PRICE5" name="PRICE5" />
    </entity>
  </document>
</dataConfig>

現在有了DB資料來源後,需要設定資料匯入進Solr時的欄位定義。
請打開/var/solr/data/CAR/conf/managed-schema
加入兩個欄位

<field name="NAME" type="string" uninvertible="true" indexed="true" stored="true"/>
<field name="PRICE5" type="string" uninvertible="true" default="0" indexed="true" stored="true"/>

都設定好後,就可以進入管理頁面開始執行匯入程序
先進入Dataimport功能頁,這裡可以看到先前設定的
carDbSourse.xml
請選擇要匯入的Entity,本文選擇匯入
Entity car
接著按下Execute開始執行匯入,過程中可以點擊Refresh Status刷新當前匯入狀態(本文由符興智撰寫)
若匯入失敗時,可以查看左側Logging頁面,檢視錯誤訊息。

四、查詢

待右上方顯示完成匯入時,就可以開啟查詢功能頁進行查詢了
點選Query進入查詢頁面
q為主查詢參數,範例為[搜尋NAME欄位,文字中帶有BMW之資料]
fq為其它篩選條件,範例為[排除PRICE5欄位,值為0之資料]
sort為排序條件,範例為[以PRICE5欄位做降冪排序]
簡單輸入完成後,按下Execute Query便可執行查詢
右側會顯示查詢結果,可以透過wt下拉選單決定回傳格式
另外,當其他語言要透過Solr查詢資料時,可以參考右上方的URL傳遞參數

五、後話
基本的Solr匯入資料教學到此結束

日後會再新增進階查詢的用法,以及直接透過xml或jason傳遞資料的方法
如果時間允許的話,也會新增java針對solr的開發套件solrj的用法範例

符興智 Felix Fu