一、介紹
企業(yè)站內(nèi)搜索技術(shù)選型
在一些大型門戶網(wǎng)站、電子商務(wù)網(wǎng)站等都需要站內(nèi)搜索功能,使用傳統(tǒng)的數(shù)據(jù)庫查詢方式實現(xiàn)搜索無法滿足一些高級的搜索需求,比如:搜索速度要快、搜索結(jié)果按相關(guān)度排序、搜索內(nèi)容格式不固定等,這里就需要使用全文檢索技術(shù)實現(xiàn)搜索功能。
1. 單獨使用Lucene實現(xiàn)
單獨使用Lucene實現(xiàn)站內(nèi)搜索需要開發(fā)的工作量較大,主要表現(xiàn)在:索引維護、索引性能優(yōu)化、搜索性能優(yōu)化等,因此不建議采用。
2. 使用Google或Baidu接口
通過第三方搜索引擎提供的接口實現(xiàn)站內(nèi)搜索,這樣和第三方引擎系統(tǒng)依賴緊密,不方便擴展,不建議采用。
3. 使用Solr實現(xiàn)
基于Solr實現(xiàn)站內(nèi)搜索擴展性較好并且可以減少程序員的工作量,因為Solr提供了較為完備的搜索引擎解決方案,因此在門戶、論壇等系統(tǒng)中常用此方案。
什么是Solr
Solr 是Apache下的一個頂級開源項目,采用Java開發(fā),它是基于Lucene的全文搜索服務(wù)器。Solr提供了比Lucene更為豐富的查詢語言,同時實現(xiàn)了可配置、可擴展,并對索引、搜索性能進行了優(yōu)化
Solr可以獨立運行,運行在 Jetty、Tomcat 等這些 Servlet 容器中,Solr 索引的實現(xiàn)方法很簡單,用 POST 方法向 Solr 服務(wù)器發(fā)送一個描述 Field 及其內(nèi)容的 XML 文檔,Solr根據(jù)xml文檔添加、刪除、更新索引 。Solr 搜索只需要發(fā)送 HTTP GET 請求,然后對 Solr 返回 Xml、json 等格式的查詢結(jié)果進行解析,組織頁面布局。Solr不提供構(gòu)建UI的功能,Solr提供了一個管理界面,通過管理界面可以查詢Solr的配置和運行情況。
solr是基于lucene開發(fā)企業(yè)級搜索服務(wù)器,實際上就是封裝了lucene。
Solr 是一個獨立的企業(yè)級搜索應(yīng)用服務(wù)器,它對外提供類似于 Web-service的API 接口。用戶可以通過 http 請求,向搜索引擎服務(wù)器提交一定格式的文件,生成索引;也可以通過提出查找請求,并得到返回結(jié)果
Solr類似 webservice,調(diào)用接口,實現(xiàn)增加,修改,刪除,查詢索引庫。
solr特性
- 高級的全文搜索功能
- 專為高通量的網(wǎng)絡(luò)流量進行的優(yōu)化
- 基于開放接口(xml和http)的標準
- 綜合的html管理界面
- 可伸縮性-能夠有效地復(fù)制到另外一個Solr搜索服務(wù)器
- 使用xml配置達到靈活性和適配性
- 可擴展的插件體系
Solr與Lucene的區(qū)別
Lucene是一個開放源代碼的全文檢索引擎工具包,它不是一個完整的全文檢索引擎,Lucene提供了完整的查詢引擎和索引引擎,目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便的在目標系統(tǒng)中實現(xiàn)全文檢索的功能,或者以Lucene為基礎(chǔ)構(gòu)建全文檢索引擎。
Solr的目標是打造一款企業(yè)級的搜索引擎系統(tǒng),它是一個搜索引擎服務(wù),可以獨立運行,通過Solr可以非??焖俚臉?gòu)建企業(yè)的搜索引擎,通過Solr也可以高效的完成站內(nèi)搜索功能。
Solr 類似 webservice,提供接口,調(diào)用接口,發(fā)送一些特點語句,實現(xiàn)增加,刪除,修改,查詢。
二、solr 安裝(mac)
- 首先安裝 jdk 和 jre
- 安裝solr:
brew install solr安裝solr,可以通過brew edit solr修改要安裝的版本 - 啟動 solr:
solr start。- 默認端口號
8083,如果該端口被占用,則會自動切換可用的端口。
solr start - 啟動成功后再瀏覽器輸入URLhttp://127.0.0.1:8983,訪問 solr 后臺管理界面
瀏覽器效果
- 默認端口號
- 創(chuàng)建 core(可以理解為mysql中的數(shù)據(jù)庫,即一個服務(wù)可以有多個庫):
solr create -c test_core
創(chuàng)建成功的 core -
測試分詞
測試分詞
由于solr自帶的分詞器無法將中文根據(jù)語義分詞,需要引入中文分詞器 IKAnalyzer
三、IKAnalyzer 安裝
下載地址:https://github.com/jxlwqq/Installing-Solr-and-indexing-MySQL-on-macOS/tree/master/file
1. 下載必要的組件
- IKAnalyzer jar 包: ik-analyzer-solr5-5.x.jar
- IKAnalyzer 配置文件: IKAnalyzer.cfg.xml
- 詞庫: mydict.dic 和 stopword.dic
下載后,將相關(guān)文件復(fù)制到相應(yīng)的目錄中,操作目錄如下:
cp ik-analyzer-solr5-5.x.jar /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/
mkdir /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/
cp IKAnalyzer.cfg.xml /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/
cp mydict.dic /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/
cp stopword.dic /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/
2. 修改 managed-schema 文件
// test_core 倉庫下
vi /usr/local/Cellar/solr/7.3.1/server/solr/test_core/conf/managed-schema
在schema標簽內(nèi)追加以下內(nèi)容:
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<field name="text_ik" type="text_ik" indexed="true" stored="true" multiValued="false"/>
3. 重啟測試
進行重啟:solr restart
進行測試:刷新頁面,進入到 test_core 倉庫下

測試成功!
四、solr 常用命令
- 其他命令
查看版本:solr -version
重啟:solr -version
關(guān)閉:solr stop -all(或者指定端口號:solr stop -p 8983)
創(chuàng)建集合:solr create -c [集合名稱]
刪除集合:solr delete -c [集合名稱]
刪除數(shù)據(jù)
<delete>
<query>*:*</query>
</delete>
<commit/>

刪除字段
{
"delete-field" : {
"name" : "字段名稱"
},
"delete-field" : {
"name" : "字段名稱"
}
}
提交的地址
POST http://localhost:8983/solr/集合名稱/schema
添加字段
name: 字段名稱
type: 字段類型
stored: 是否保存
indexed: 是否索引
{
"add-field" : {
"name" : "字段名稱",
"type" : "text_ik",
"stored" : "true",
"indexed" : "true"
},
"add-field" : {
"name" : "字段名稱",
"type" : "text_ik",
"stored" : "true"
}
}
提交地址
POST http://localhost:8983/solr/集合名稱/schema
還可以在管理員界面添加

參考資料



