第九篇:搭建Solr服務(wù)

前言:
我們前面已經(jīng)介紹了如何用利用redis使用緩存效果來(lái)提高我們?cè)L問(wèn)的效率,減少用戶的等待時(shí)間和數(shù)據(jù)庫(kù)的訪問(wèn)。下面要介紹的搜索系統(tǒng)的搭建。

1.搜索工程的搭建

image.png

以前我們說(shuō)過(guò),每個(gè)系統(tǒng)都是單一只能的原則,搜索也不例外。為什么我們搜索也要單獨(dú)出來(lái)呢 ?我們來(lái)看看京東的搜索可以發(fā)現(xiàn)地址欄是發(fā)生改變的了。

image.png

image.png

科普時(shí)間
Solr是一個(gè)獨(dú)立的企業(yè)級(jí)搜索應(yīng)用服務(wù)器,它對(duì)外提供類似于Web-service的API接口。用戶可以通過(guò)http請(qǐng)求,向搜索引擎服務(wù)器提交一定格式的XML文件,生成索引;也可以通過(guò)Http Get操作提出查找請(qǐng)求,并得到XML格式的返回結(jié)果。
Solr是一個(gè)高性能,采用Java5開(kāi)發(fā),基于Lucene的全文搜索服務(wù)器。同時(shí)對(duì)其進(jìn)行了擴(kuò)展,提供了比Lucene更為豐富的查詢語(yǔ)言,同時(shí)實(shí)現(xiàn)了可配置、可擴(kuò)展并對(duì)查詢性能進(jìn)行了優(yōu)化,并且提供了一個(gè)完善的功能管理界面,是一款非常優(yōu)秀的全文搜索引擎。
對(duì)于淘淘商城來(lái)講,由于網(wǎng)上商城的搜索頻率特別高,我們很有必要把搜索單獨(dú)做成一個(gè)服務(wù),這樣做的好處是可以針對(duì)該服務(wù)做擴(kuò)展,做成服務(wù)集群等。其它模塊都可以調(diào)用solr服務(wù)。

1.1搭建Solr服務(wù)

首先來(lái)看看我們搭建Solr服務(wù)所需要的環(huán)境配置:

  • Solr是java開(kāi)發(fā)的,因此需要安裝jdk。我用的1.7
  • Solr安裝在Linux環(huán)境中,這里用的是虛擬機(jī)Centos6.5。
  • 需要安裝Tomcat
    搭建步驟:
    1.把文件上傳到Linux中


    image.png

2.解壓
tar -zxvf solr-4.10.3.tgz.tgz -C /usr/local/
3.安裝Tomcat
網(wǎng)上教程很多~這里不再贅述;解壓完成后在/usr/local下創(chuàng)建一個(gè)solr目錄
mkdir /usr/local/solr
然后將解壓后的tomcat賦值一份到solr目錄下
cp -r apache-tomcat-7.0.47 /usr/local/solr/tomcat
4.將solr和Tomcat結(jié)合
我們將solr的war包放到tomcat的webapps目錄下并命名為solr.war
cp /usr/local/solr-4.10.3/dist/solr-4.10.3.war /usr/local/solr/tomcat/webapps/solr.war
然后解壓solr.war
bin/startup.sh
我們可以用tailf logs/catalina.out命令查看啟動(dòng)日志
下面我們刪掉solr.war,但是前提是先關(guān)閉掉tomcat,然后再刪除(如果不關(guān)閉tomcat就刪除solr.war的話,solr文件夾也會(huì)被刪除)
bin/shutdown.sh
rm -rf solr.war
下面我們將example/lib/ext目錄下的所有jar包拷貝到/usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/目錄下
cp /usr/local/solr-4.10.3/example/lib/ext/* /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
將example目錄下的solr文件夾復(fù)制到/usr/local/solr/目錄下并且重命名為solrhome,如下所示
cp -r example/solr /usr/local/solr/solrhome
5.關(guān)聯(lián)solr及solrhome。需要修改solr工程的web.xml文件。

image.png

6.啟動(dòng)tomcat
bin/startup.sh
7.測(cè)試
在瀏覽器中輸入訪問(wèn)地址
image.png

如果訪問(wèn)不了記得關(guān)掉防火墻?。?!

2.配置業(yè)務(wù)域

2.1首先由于在Solr中默認(rèn)是沒(méi)有中文分析器的,需要手工配置,配置一個(gè)FieldType,在FieldType中指定中文分析器。另外,Solr中的字段必須先定義,后使用。

1.將壓縮包上傳到solr服務(wù)上
2.安裝zip和unzip命令(如果有請(qǐng)忽略~)
yum install zip unzip
3.解壓
unzip IKAnalyzer2012FF_hf1.zip
4.解壓完后看看里面的東西有啥~

image.png

其中我們需要里面的jar包。
我們把jar包添加到solr工程中
cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib
5.把擴(kuò)展詞典、配置文件放到solr工程的WEB-INF/classes目錄下
cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes
6.配置fieldType
我們需要在solrhome/collection1/conf/schema.xml中配置,所以先找到這個(gè)文件
image.png

7.編輯schema.xml
使用Shit+G到文件末尾,加上以下配置

<fieldType name="text_ik" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

8.配置業(yè)務(wù)字段
我們需要在schema.xml中配置的字段有
1、商品Id
2、商品標(biāo)題
3、商品賣點(diǎn)
4、商品價(jià)格
5、商品圖片
6、分類名稱
7、商品描述
在末尾中繼續(xù)添加

   <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"/>

我們可以看到上面有一段是復(fù)制域即item_keywords,復(fù)制域的好處是可以調(diào)高查詢效率,原本可能要查詢多個(gè)字段,現(xiàn)在只需要查詢一個(gè)字段就可以了(因?yàn)槎及阉袃?nèi)容放在一個(gè)域里面了,所以查詢很方便!)
9.重啟tomcat


image.png

看到這些就成功了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容