1. 程式人生 > >Solr(全文搜尋功能)的介紹,安裝及配置

Solr(全文搜尋功能)的介紹,安裝及配置

Solr(全文搜尋功能)

Solr是什麼?

Solr 是Apache下的一個頂級開源專案,採用Java開發,它是基於Lucene的全文搜尋伺服器。Solr提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴充套件,並對索引、搜尋效能進行了優化。
Solr是一個全文檢索伺服器,只需要進行配置就可以實現全文檢索服務。
Solr可以獨立執行,執行在Jetty、Tomcat等這些Servlet容器中,Solr 索引的實現方法很簡單,用 POST 方法向 Solr 伺服器傳送一個描述 Field 及其內容的 XML 文件,Solr根據xml文件新增、刪除、更新索引 。Solr 搜尋只需要傳送 HTTP GET 請求,然後對 Solr 返回Xml、json等格式的查詢結果進行解析,組織頁面佈局。Solr不提供構建UI的功能,Solr提供了一個管理介面,通過管理介面可以查詢Solr的配置和執行情況。

Solr的安裝

需要把solr伺服器安裝到linux環境
第一步:Linux環境下安裝JDK及Tomcat
第二步:下載Solr壓縮包並上傳到Linux上(我這裡用的是solr-4.9.1.tgz),並解壓,改名為solr(tar -zxvf solr-4.9.1.tgz )(mv solr-4.9.1 solr)
下載地址:http://www.apache.org/dyn/closer.lua/lucene/solr/4.9.1下載地址實在不好找最後找到如下的http://archive.apache.org/dist/lucene/solr/
第三步:將/usr/local/jae/solr/dis目錄下的solr-4.9.1.war包部署到tomcat下,並改名為solr.war(cp solr-4.9.1.war /usr/local/jae/tomcat/webapps/solr.war)
第四步:啟動tomcat,使war包自動解壓,然後關閉tomcat,刪除solr.war

1. cd /usr/local/jae/tomcat/bin
2. ./startup.sh
3. IP地址:8080測試tomcat是否啟動成功
4. ./shutdown.sh
5. cd ../webapps
6. rm -f solr.war

第五步:把/usr/local/jae/solr/example/lib/ext目錄下所有的jar包複製到solr工程中

1. cd /usr/local/jae/solr/example/lib/ext
2. cp * /usr/local/jae/tomcat/webapps/solr/WEB-INF/lib/

第六步:建立一個solrhome(存放solr伺服器所有配置檔案的目錄)

1.
cd /usr/local/jae/solr/example(這裡的solr目錄就是一個標準的solrhome目錄) 2. cp -r solr /usr/local/jae/solrhome

第七步:告訴solr伺服器solrhome的位置,需要修改solr工程的web.xml檔案。
vim /usr/local/jae/tomcat/webapps/solr/WEB-INF/web.xml
配置JNDI,去掉env-entry處的註釋並將env-entry-value改為你solrhome目錄的位置
這裡寫圖片描述
第八步:啟動tomcat,瀏覽器訪問IP地址:8080/solr 看到solr介面
這裡寫圖片描述

使用solr

配置業務欄位
  1. 在solr中預設沒有中文分析器,需要手工配置。配置一個FieldType,在FieldType中指定中文分析器。
  2. Solr中的欄位必須是先定義後使用。
(1)中文分析器的配置
  1. 使用IK-Analyzer。把分析器的資料夾上傳到伺服器
  2. 將IK Analyzer 2012FF_hf1.zip檔案上傳到Linux伺服器的/usr/local/jae,然後執行unzip IK Analyzer 2012FF_hf1.zip命令解壓zip包到當前目錄,將 IK Analyzer 2012FF_hf1重新命名為IK( mv IK\ Analyzer\ 2012FF_hf1/ IK)
  3. cd IK
  4. 這裡寫圖片描述
  5. 需要把分析器的jar包新增到solr工程中
    cp IKAnalyzer2012FF_u1.jar /usr/local/jae/tomcat/webapps/solr/WEB-INF/lib/
  6. 需要把IKAnalyzer需要的擴充套件詞典及停用詞詞典、配置檔案複製到solr工程的classpath。
1. cd /usr/local/jae/tomcat/webapps/solr/WEB-INF/
2.mkdir classes
3. cd /usr/local/jae/IK
4.cp ext_stopword.dic IKAnalyzer.cfg.xml mydict.dic /usr/local/jae/tomcat/webapps/solr/WEB-INF/classes
注意:擴充套件詞典及停用詞詞典的字符集必須是utf-8。不能使用windows記事本編輯。
  1. 配置fieldType。需要在solrhome/collection1/conf/schema.xml中配置。
    (vim /usr/local/jae/solrhome/collection1/conf/schema.xml)
    在最後面加上
<fieldType name="text_ik" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

技巧:使用vi、vim跳轉到文件開頭gg。跳轉到文件末尾:G

(2)業務欄位配置

我們的商品表
這裡寫圖片描述
參考京東的搜尋功能,業務欄位判斷的標準大概有兩
1. 在搜尋時是否需要在此欄位上進行搜尋。例如:商品名稱,商品賣點,商品描述
2. 後續的業務是否需要用到此欄位。例如:商品id
最後得出需要用到的欄位:
商品id,商品名稱,商品賣點,商品描述,商品價格和商品圖片(用於搜尋後展示),商品分類名稱(搜尋時可能根據類別來搜尋)

solr中的業務欄位:
1. id->商品id
其他的對應欄位建立solr的欄位。
繼續在(vim /usr/local/jae/solrhome/collection1/conf/schema.xml)最後面新增程式碼

<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price"  type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" />

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>
<copyField source="item_desc" dest="item_keywords"/>

stored=”true”就儲存,儲存則用於展示,若不展示則不儲存,節約儲存空間
item_keywords是複製域,為solr提供的搜尋優化(在多個域上搜索速度不如在一個域域上快,複製域將多個域合為一個域)
這裡寫圖片描述
分析成功