本文地址:
http://zhoujianghai.iteye.com/blog/1540176
首先介紹一下solr:
Apache Solr (讀音: SOLer) 是一個(gè)開(kāi)源、高性能、采用Java開(kāi)發(fā)、基于Lucene的全文搜索服務(wù)器,文檔通過(guò)Http利用XML加到一個(gè)搜索集合中,查詢?cè)摷弦彩峭ㄟ^(guò) http收到一個(gè)XML/JSON響應(yīng)來(lái)實(shí)現(xiàn)。Solr 中存儲(chǔ)的資源是以 Document 為對(duì)象進(jìn)行存儲(chǔ)的。每個(gè)文檔由一系列的 Field 構(gòu)成,每個(gè) Field 表示資源的一個(gè)屬性。Solr 中的每個(gè) Document 需要有能唯一標(biāo)識(shí)其自身的屬性,默認(rèn)情況下這個(gè)屬性的名字是 id,在 Schema 配置文件(schema.xml)中使用:<uniqueKey>id</uniqueKey>
進(jìn)行描述。solr有兩個(gè)核心文件,solrconfig.xml和schema.xml。solrconfig.xml是solr的基礎(chǔ)文件,里面配置了各種web請(qǐng)求處理器、請(qǐng)求響應(yīng)處理器、日志、緩存等;schema.xml配置映射了各種數(shù)據(jù)類型的索引方案,分詞器的配置、索引文檔中包含的字段也在此配置。
工作中主要用來(lái)分詞和搜索,簡(jiǎn)單的工作原理是:利用分詞器對(duì)數(shù)據(jù)源進(jìn)行分詞處理,然后根據(jù)分詞結(jié)果建立索引庫(kù);查詢的時(shí)候,利用分詞器對(duì)查詢語(yǔ)句進(jìn)行分詞,根據(jù)查詢語(yǔ)句分詞的結(jié)果在索引庫(kù)中進(jìn)行匹配,最后返回結(jié)果。
廢話少說(shuō),下面開(kāi)始solr之旅吧:
一.安裝JDK和Tomcat
(2):安裝tomcat,下載tomcat安裝包,解壓到apache-tomcat目錄下
修改tomcat安裝目錄下的conf目錄的server.xml
找到<Connector port="8080" .../>,加入URIEncoding="UTF-8",為了支持中文。
設(shè)置Java和tomcat環(huán)境變量
上面兩步比較簡(jiǎn)單,這里就只簡(jiǎn)單描述一下,不明白的可以網(wǎng)上查資料。
二. 安裝solr
下載solr包,http://labs.renren.com/apache-mirror/lucene/solr/3.5.0/apache-solr-3.5.0.zip
解壓縮到apache-solr目錄,把a(bǔ)pache-solr/dist目錄下的apache-solr-3.5.0.war 復(fù)制到$TOMCAT_HOME/webapps目錄下,重命名為solr.war
復(fù)制apache-solr/example/solr到tomcat根目錄下(如果你想配置多core(實(shí)例),就復(fù)制apache-solr /example/multicore到tomcat根目錄下,不用復(fù)制solr了),作為solr/home,以后也可以往該目錄添加 core,每個(gè)core下面都可以有自己的配置文件。
在apache-tomcat/conf/Catalina/localhost/下創(chuàng)建solr.xml(跟webapps下的solr項(xiàng)目同名),指定solr.war和solr/home的位置,讓tomcat啟動(dòng)時(shí)就自動(dòng)加載該應(yīng)用。
solr.xml內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="/home/zhoujh/java/apache-tomcat7/webapps/solr.war" debug="0" crossContext="true" >
<Environment name="solr/home" type="java.lang.String" value="/home/zhoujh/java/apache-tomcat7/solr" override="true" />
</Context>
然后在tomcat的bin目錄下執(zhí)行./startup.sh,啟動(dòng)tomcat
在地址欄訪問(wèn)http://localhost:8080/solr/
將會(huì)出現(xiàn)solr歡迎界面和admin入口
注:如果出現(xiàn)org.apache.solr.common.SolrException: Error loading class 'solr.VelocityResponseWriter' 異常,最簡(jiǎn)單的解決方法:找到$TOMCAT_HOME/solr/conf/solrconfig.xml,把<queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" enable="${solr.velocity.enabled:true}"/>注釋掉或者enable:false即可。如果一切順利的話,現(xiàn)在可以看到solr的web管理界面了。不過(guò)要想實(shí)現(xiàn)分詞的功能,得安裝一個(gè)中文分詞器,這里推薦IKAnalyzer或mmseg4j。
IKAnalyzer是一個(gè)開(kāi)源的,基于java語(yǔ)言開(kāi)發(fā)的輕量級(jí)的中文分詞工具包,采用了特有的“正向迭代最細(xì)粒度切分算法“,具有60萬(wàn)字/秒的高速處理能力,采用了多子處理器分析模式,支持:英文字母(IP地址、Email、URL)、數(shù)字(日期,常用中文數(shù)量詞,羅馬數(shù)字,科學(xué)計(jì)數(shù)法),中文詞匯(姓名、地名處理)等分詞處理。優(yōu)化的詞典存儲(chǔ),更小的內(nèi)存占用。支持用戶詞典擴(kuò)展定。
mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法(http://technology.chtsai.org/mmseg/ )實(shí)現(xiàn)的中文分詞器,并實(shí)現(xiàn) lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。MMSeg 算法有兩種分詞方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四個(gè)規(guī)則過(guò)慮。官方說(shuō):詞語(yǔ)的正確識(shí)別率達(dá)到了 98.41%。mmseg4j 已經(jīng)實(shí)現(xiàn)了這兩種分詞算法。
三. 配置中文分詞器
下面分別安裝這兩個(gè)中文分詞器,當(dāng)然選擇安裝其中一個(gè)也是可以的。
(1)安裝IKAnalyzer
下載地址: http://code.google.com/p/ik-analyzer/downloads/list
在當(dāng)前目錄下新建IKAnalyzer目錄,解壓到該目錄下:unzip IKAnalyzer2012_u5.zip -d ./IKAnalyzer
把IKAnalyzer目錄下的IKAnalyzer2012.jar文件拷貝到 $TOMCAT_HOME/webapps/solr/WEB-INF/lib/下
配置schema.xml,編輯$TOMCAT_HOME/solr/conf/schema.xml,在文件中添加下面這個(gè)fieldtype
注:下面的代碼中多了很多“<span style="font-size: x-small;">”標(biāo)簽,這個(gè)是設(shè)置字體時(shí)iteye編輯器自己生成的。




















然后找到這一句:<defaultSearchField>text</defaultSearchField>把它改成<defaultSearchField>game_name</defaultSearchField>
在瀏覽器打開(kāi)http://localhost:8080/solr/admin/analysis.jsp,就可以進(jìn)行分詞處理了。
IKAnalyzer添加自定義分詞詞典:詞典文件格式為無(wú)BOM的UTF-8編碼的文本文件,文件擴(kuò)展名不限,一次可以添加多個(gè)詞庫(kù),每個(gè)詞庫(kù)以";"分開(kāi)。把IKAnalyzer 目錄下的IKAnalyzer.cfg.xml和stopword.dic拷貝到$TOMCAT_HOME/webapps/solr/WEB_INF /classes目錄下,可以自己新建一個(gè)mydic.dic文件,然后在IKAnalyzer.cfg.xml里進(jìn)行配置。
(2)安裝mmseg4j
下載地址:http://code.google.com/p/mmseg4j/downloads/list
在當(dāng)前目錄下新建mmseg4j目錄,解壓到該目錄下:unzip mmseg4j-1.8.5.zip -d ./mmseg4j
把mmseg4j目錄下的mmseg4j-all-1.8.5.jar文件拷貝到 $TOMCAT_HOME/webapps/solr/WEB-INF/lib/下
配置schema.xml,編輯$TOMCAT_HOME/solr/conf/schema.xml,在文件中添加下面這個(gè)fieldtype


















注意:dicPath的值改成你自己機(jī)器上相應(yīng)的目錄。
然后修改之前添加的filed,讓其使用mmseg4j分詞器

配置mmseg4j分詞詞典:MMSEG4J的詞庫(kù)是可以動(dòng)態(tài)加載的,詞庫(kù)的編碼必須是UTF-8,mmseg4j 默認(rèn)從當(dāng)前目錄下的 data 目錄讀取上面的文件,當(dāng)然也可以指定別的目錄,比如我就放在自定義的dict目錄下。自定義詞庫(kù)文件名必需是 "words" 為前綴和 ".dic" 為后綴。如:/data/words-my.dic。
這里直接把mmseg4j/data目錄下的所有.dic文件拷貝到$TOMCAT_HOME/solr/dict目錄下。共有:4個(gè)dic文件,chars.dic、units.dic、 words.dic、 words-my.dic。下面簡(jiǎn)單解釋一下這幾個(gè)文件的作用。
1、chars.dic,是單個(gè)字,和對(duì)應(yīng)的頻率,一行一對(duì),字在全面,頻率在后面,中間用空格分開(kāi)。這個(gè)文件的信息是 complex 模式要用到的。在最后一條過(guò)慮規(guī)則中使用了頻率信息。
2、units.dic,是單位的字,如:分、秒、年。
3、words.dic,是核心的詞庫(kù)文件,一行一條,不需要其它任何數(shù)據(jù)(如詞長(zhǎng))。
4、words-my.dic,是自定義詞庫(kù)文件
在瀏覽器打開(kāi)http://localhost:8080/solr/admin/analysis.jsp,就可以看到分詞效果了。
現(xiàn)在,這兩種分詞方法都已配置好了,想用哪種就把查詢的filed的type設(shè)置成哪種。