Marco's Java【Solr入門(一) 之 Solr簡介及安裝】

前言

在使用傳統數據庫(例如Mysql)做模糊查詢的時候,相信有經驗的朋友都知道,如果使用%content%的方式進行模糊查詢,一旦數據量變大,搜索速度會變得很慢,此時可能大家都會想到用索引來解決這個問題。
但是,這種模糊查詢的方式會走索引麼?答案顯然是否定的,因爲索引有個原則 “最左匹配原則”,而%是不會走索引的,因此該sql語句執行之後會全表掃描,這種方式顯然是不可取的… 但有什麼辦法,既可以滿足模糊查詢(%content%的形式),又可以增加查詢效率呢?
答案就是Solr!

什麼是Solr

我們先來看看度娘上是怎麼介紹Solr的。

在這裏插入圖片描述
Solr是一個高性能,採用Java開發基於Lucene的全文搜索服務器。同時對其進行了擴展,提供了比Lucene更爲豐富的查詢語言,同時實現了可配置、可擴展並對查詢性能進行了優化,並且提供了一個完善的功能管理界面,是一款非常優秀的全文搜索引擎。Solr是基於Apache Lucene ™構建的流行,快速,開源的企業搜索平臺。它並不是apache的頂級項目,而是lucene一個子項目而已

用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件或者Json格式字符串,生成索引,也可以通過http get操作提出查找請求,並得到XML或者Json格式的返回結果。而XML文件和Json本質上都是由字符串構成的,因此Solr具有天然的跨平臺特性。

什麼是Lucene

剛纔提到說Solr是採用Java開發基於Lucene的全文搜索服務器,那麼Lucene又是何方神聖呢?

Lucene是apache軟件基金會4 jakarta項目組的一個子項目,是一個開放源代碼的全文檢索引擎工
具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索
引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是爲軟件開發人員提供一個
簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此爲基礎建立起完整的全文
檢索引擎。Lucene是一套用於全文檢索和搜尋的開源程式庫,由Apache軟件基金會支持和提供。
Lucene提供了一個簡單卻強大的應用程式接口,能夠做全文索引和搜尋。在Java開發環境裏Lucene是
一個成熟的免費開源工具。就其本身而言,Lucene是當前以及最近幾年最受歡迎的免費Java信息檢索程
序庫。人們經常提到信息檢索程序庫,雖然與搜索引擎有關,但不應該將信息檢索程序庫與搜索引擎相 混淆。

說白了,Lucene就是一個用來實現搜索功能的庫,它內置了大量的算法,在搜索使用這個算法,能加快檢索速度。這種感覺就像是C++和Python,大家應該都知道現如今很火爆的人工智能基本上都是由Python撰寫的,但是人工智能的很多算法並不是由Python編寫的,而是C++,Lucene其實也就是算法庫,儲存了大量的檢索算法,而Solr就是面向企業應用的獨立的應用程序,Lucene更偏向於底層。

Solr 和 Lucene 的區別

Solr和Lucene的本質區別有以下三點:

Lucene Solr
本質上是搜索庫 是獨立的應用程序
專注於搜索底層的建設 專注於企業應用
不負責支撐搜索服務所必須的管理 負責支撐搜索服務所必須的管理

因此,Solr可以算是是Lucene面向企業搜索應用的擴展

Solr的安裝

介紹了這麼多,其實Solr就是一個專業的搜索服務器 Solr Download

配置java環境變量

下載請戳 Linux JDK Download ,記得下載後綴爲tar.gz的包哦!

第一步:下載linux版本JDK
在這裏插入圖片描述
在這裏插入圖片描述
第二步:使用XFTP傳到Linux並解壓
接着我們在Linux下的下創建/download目錄,並藉助XFTP將文件傳到此目錄
然後使用以下指令將文件解壓到usr/local/java

tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/local/java/

第三步:配置環境變量
通過vi /etc/profile指令在最後添加以下配置,這裏的JAVA_HOME和Window是一樣的,也就是jdk中存放bin(可執行文件)子目錄的根路徑,下面的寫法就是固定的了。

JAVA_HOME=/usr/local/java/jdk1.8.0_181
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

注意配置完成之後要使用source /etc/profile刷新/etc/profile配置文件

第五步:測試
輸入java -version,測試,如果jdk安裝配置成功之後,會得到如下結果
在這裏插入圖片描述

安裝Solr

第一步:下載Solr的壓縮包
這裏我就直接使用wget啦!大家也可以點擊 Solr Download 下載,使用Xftp將文件導入到Linux文件夾中

#創建solr文件夾
mkdir /usr/local/solr
cd /usr/local/solr
#下載solr至該文件夾中
wget http://mirror.bit.edu.cn/apache/lucene/solr/7.7.2/solr-7.7.2.tgz

第二步:解壓Solr壓縮包

tar -zxvf solr-7.7.2.tgz

解壓完成之後的目錄分析如下

目錄名稱 解釋
Bin 可執行腳本
Contrib 給Solr額外添加功能的
Dist Solr的依賴包
Docs 文檔
Server Solr 服務器的目錄

第三步:Solr的啓動和關閉
Solr的啓停命令很簡單,./solr start爲啓動,./solr stop爲停止,./solr restart爲重啓。注意了,在root 用戶裏面,solr 要啓動必須添加 -force

[root@localhost bin]# ./solr start -force
*** [WARN] *** Your open file limit is currently 1024.  
It should be set to 65000 to avoid operational disruption. 
If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh
*** [WARN] ***  Your Max Processes Limit is currently 3795. 
It should be set to 65000 to avoid operational disruption. 
If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh
NOTE: Please install lsof as this script needs it to determine if Solr is listening on port 8983.

Started Solr server on port 8983 (pid=7661). Happy searching!

第四步:測試
在這裏插入圖片描述
不難發現 “我愛中國” 被拆分成了4個詞?但是這樣分詞並檢索沒有一點意義
大家可以點擊Analyse Fieldname / FieldType,並沒有找到text.cn(中文分詞器)?是不是很坑?
在這裏插入圖片描述

第五步:配置ik 分詞器(最好的中文分詞器)
咱們先準備ik的資源,分詞器下載請戳 IK Download
在這裏插入圖片描述
下載好之後,使用Xftp將ik包中的下面兩個jar包放入solr-wepapp/webapp/WEB-INF/lib
在這裏插入圖片描述
第六步:配置擴展,停詞
接着我們新建一個classes文件夾(代表java 編譯後的jar ,或者需要的xml文件)
在這裏插入圖片描述
使用Xftp將ik包中剩餘的三個文件放入新建好的classes文件夾中
在這裏插入圖片描述
接着通過cd /usr/local/solr7/solr-7.7.2/server/solr/{ego:庫的名稱}/conf指令進入修改配置文件的目錄中,並找到配置文件managed-schema,新增text_cn字段類型

[root@localhost conf]# cd /usr/local/solr/solr-7.7.2/server/solr/marco/conf/
[root@localhost conf]# ll
總用量 132
drwxr-xr-x. 2 root root  4096 99 12:48 lang
-rw-r--r--. 1 root root 54513 517 06:55 managed-schema
-rw-r--r--. 1 root root   308 517 06:48 params.json
-rw-r--r--. 1 root root   873 517 06:48 protwords.txt
-rw-r--r--. 1 root root 53986 517 06:55 solrconfig.xml
-rw-r--r--. 1 root root   781 517 06:48 stopwords.txt
-rw-r--r--. 1 root root  1124 517 06:48 synonyms.txt

使用vim managed-schema指令修改配置文件,加入以下ik的中文配置

<!-- Chinese -->
<dynamicField name="*_txt_cn" type="text_cn"  indexed="true"  stored="true"/>
<fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="false"/>
  </analyzer>
</fieldType>

第七步:重啓solr
執行./solr restart -force重啓Solr
在這裏插入圖片描述
此時,我們搜索text_cn就可以搜索到中文分詞啦!
在這裏插入圖片描述
再來執行分詞,發現 “我愛中國” 被拆分爲 “愛” 和 “中國” 了!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章