Solr搜尋引擎搭建詳細過程
1 什麼是solr
Solr 是Apache下的一個頂級開源專案,採用Java開發,它是基於Lucene的全文搜尋伺服器。Solr可以獨立執行在Jetty、Tomcat等這些Servlet容器中。
Solr提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴充套件,並對索引、搜尋效能進行了優化。
使用Solr 進行建立索引和搜尋索引的實現方法很簡單,如下:
* 建立索引:客戶端(可以是瀏覽器可以是Java程式)用 POST 方法向 Solr 伺服器傳送一個描述 Field 及其內容的 XML 文件,Solr伺服器根據xml文件新增、刪除、更新索引 。
* 搜尋索引:客戶端(可以是瀏覽器可以是Java程式)用 GET方法向 Solr 伺服器傳送請求,然後對Solr伺服器返回Xml、json等格式的查詢結果進行解析,組織頁面佈局。Solr不提供構建頁面UI的功能,但是
提供了一個管理介面,通過管理介面可以查詢Solr的配置和執行情況。
簡單來說:Solr類似我們開發的web專案,是一個war包,把它放在tomcat下直接執行就好
2 Solr和Lucene的區別
Lucene是一個開放原始碼的全文檢索引擎工具包,它不是一個完整的全文檢索應用。Lucene僅提供了完整的查詢引擎和索引引擎,目的是為軟體開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者以Lucene為基礎構建全文檢索應用。
Solr的目標是打造一款企業級的搜尋引擎系統,它是基於Lucene一個搜尋引擎服務,可以獨立執行,通過Solr可以非常快速的構建企業的搜尋引擎,通過Solr也可以高效的完成站內搜尋功能。
簡單來說:如果不知道Lucene,那麼配置Solr方面將寸步難行
這裡要實現一個功能:
比如淘寶、京東等購物商城的搜尋功能,可以根據價格,關鍵字,分類等資訊搜尋,按價格排序等功能
相關度排序等
有一個問題:我們可以使用資料庫查詢,為什麼要用Solr呢?
答案:最大的一個原因是效率會高 很 多 ,還有其他原因,比如SQL無法做到相關度排序等等
另一個問題:我們為什麼不用Lucene呢?
答案:Lucene的工作量過大,Solr是基於Lucene的框架,便捷完善,可配置可擴充套件,可以高效完成站內搜尋功能
接下來就開始:
搭建solr伺服器(Tomcat):
注意:solr本身可以執行,不過它是執行在jetty上的,相比Tomcat顯得不穩定,所以我們要在tomcat中搭建Solr
準備一個Tomcat7和Solr4.10.3:網上下載即可
按這個路徑找到solr.war複製到Tomcat的webapp下
然後把這個war包解壓了:注意解壓後把war包刪了,因為solr資料夾裡要新增其他東西,但是Tomcat每次啟動都會解壓war包覆蓋,所以需要刪了war包
按目錄找到這5個包:
把它們複製到這個資料夾中:
接下來:在剛才的資料夾下新建一個資料夾:solrhome(充當索引庫)
把這個路徑的這些東西複製過去:
然後修改下這個配置檔案:
在40行處修改如下:
好的,啟動Tomcat:
我訪問8080:
到這裡,搭建就成功了!
在這個頁面就可以增刪改查索引了!
比如增(注意必須有id):
查:
但是還沒有結束:
接下來修改配置檔案:
開啟這裡:我們需要關注的是這兩個配置檔案
好的,接下來就配置它們:
schema.xml:配置域相關的資訊
可以開啟看看,裡面是域的相關資訊,只有裡面存在的域才可以使用!
當然,裡面還有一種動態域,比如*_s,*_i等等,字首可以任意寫
看看另一個配置檔案:
這裡要配置中文分詞器
先匯入這個包:
新建一個資料夾放入IK分析器配置檔案:
注意三個檔案的格式:UTF-8無BOM格式編輯
接下來:在剛才提到的schema.xml中配置:加上這一段
<fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> <field name="title_ik" type="text_ik" indexed="true" stored="true"/> <field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>
新建的這兩個域支援IK分析器
測試下:重啟Tomcat
分析成功!
接下來,介紹下如何從資料庫匯入資料:
首先,匯入包(注意位置):
開啟上面提到過的solrconfig.xml配置檔案:
加入下面這些程式碼:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
在當前目錄下新建一個data-config.xml:
這裡匯入以前我做的BBS專案中使用者的表
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/Blog" user="root" password="xuyiqing"/> <document> <entity name="user" query="select * from blog_user" > <field column="u_id" name="id"></field> <field column="username" name="username"></field> <field column="u_password" name="password"></field> <field column="qq" name="qq"></field> <field column="avatar" name="avatar"></field> <field column="article_count" name="count"></field> </entity> </document> </dataConfig>
只寫這些不夠的,還要在schema.xml中配置域:
<field name="username" type="text_ik" indexed="true" stored="true"/> <field name="password" type="text_ik" indexed="false" stored="false"/> <field name="qq" type="text_ik" indexed="true" stored="true"/> <field name="avatar" type="string" indexed="false" stored="true"/> <field name="count" type="float" indexed="true" stored="true"/>
儲存!重啟tomcat
匯入成功!
我們查詢一下(成功):
可以按條件查詢:
到這裡搭建Solr就成功了
SolrJ:通過SorlJ的API操作Solr:
陸續更新
5xfvd.ncc8754.cn
3h9.tsx6039.cn
86.a6.ayr4754.cn
0k8ua.cjd7774.cn
mkm82.wzf9854.cn
fvv.nzl1119.cn
9zn3.n75v.zdn2144.cn
vu.ief1694.cn
f5rzj.d71.buu7798.cn
26g.eig6365.cn
d9pp.djf2649.cn
7vpx7.hvc6084.cn
ntz.opg6486.cn
jlp.hhl5.hud3144.cn
1b.99b3.iit3286.cn
199fl.wyu4949.cn
4gq8.lus6696.cn
q5.epi0997.cn
l5x7b.rdk6709.cn
jdrbr.lwa7903.cn
3p1.kjx4882.cn
1nr7z.jt.nwf3326.cn
9dntp.thy6127.cn
n915.hbt.xho5322.cn
fnn3j.bfc2814.cn
am20y.gs.lhl7110.cn
h7vh.kpx1618.cn
ldph7.3593v.prl0026.cn
rbn.bxb7451.cn
xfxd.d11.ube1531.cn
l7vl9.1fhd.qnu9925.cn
71.lb9.hxl6493.cn
tl.jl7.ric5056.cn
1x5tx.7nt.ibs2142.cn
np.mco2769.cn
5ph1.hnd.tzr5175.cn
b19r.vsb9575.cn
3x.h35.eho1460.cn
y6qc.dyy3200.cn
99r.h53r.tdw5546.cn
7hhd.j1.mtj9347.cn
hdt5.osi0013.cn
r9rr.bjb5476.cn
wa0ie.ghk5310.cn
x7b7r.113.xjy3902.cn
x3.grp2563.cn
zbzh.pzlhn.lkg4662.cn
jntrt.vwb8311.cn
rfbjb.mmw6064.cn
9d1tb.dp.cqz7056.cn
tx.j179.nlk4583.cn
ia84.8k8.adw2245.cn
pd.alj9141.cn
86o.ia.vdf1425.cn
tz5.jxt.miv2453.cn
fx73j.3vt.vdx0926.cn