從零開始的Solr建置-CentOS架設、MySQL匯入資料、查詢
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的安裝。
三、建立核心
核心(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的用法範例