轉載請註明出處:http://lucien-zzy.iteye.com/blog/2002087
這篇文章講解了哪兒些功能的實現呢?
第一:能通過http://localhost:7080/solr/ 正常訪問solr,介紹三種solr/home的配置方式(這裏用JNDI方式實現)分別爲:基於JNDI、基於當前路徑、基於環境變量的方式
第二:實現三種中文分詞器的安裝,包括:smartcn 分詞器、IK 分詞器、mmseg4j分詞器、
第三:實現中英停詞詞庫、sogou詞庫、擴展詞庫的安裝
第四:簡單介紹下拼音分詞器的安裝,拼音檢索主要是要支持suggest,目前還沒有發現Solr能 很好的實現拼音檢索的功能,隨後會發表一片介紹用Lucene來自定義實現漢語轉拼音,切分,並能很好的支持suggest。
運行環境:
運行系統:windows7(這裏以windows7做實例,windows、Linux等系統下的搭建大同小異)
運行容器:apache-tomcat-7.0.37-windows-x64
Solr版本:solr-4.3.1
準備工作:
下載tomcat 7: http://tomcat.apache.org/download-70.cgi
下載Solr4.3.1:http://archive.apache.org/dist/lucene/solr/
下載IKAnalyzer的發行包:http://ik-analyzer.googlecode.com/files/IK%20Analyzer%202012FF_hf1.zip
下載mmseg4j的發行包:https://mmseg4j.googlecode.com/files/mmseg4j-1.9.1.zip
下載smartcn的發行包:smartcn是跟solr同步的,solr例中有,所以不需要額外的下載
下載sogou詞庫:http://code.google.com/p/mmseg4j/downloads/detail?name=sogou-dic-utf8.zip& can=2&q
下載中文停詞詞庫:見附件(英文停詞詞庫在安裝IK分詞器的時候順便已經安裝)
下載pinyinAnalyzer:見附件
下載拼音pinyin4j-2.5.0:http://pinyin4j.sourceforge.net/(附件中也有)
下載lucene-4.3.1:見附件(拼音分詞我們需要裏面的lucene-analyzers-common-4.3.1.jar和lucene-core-4.3.1.jar,附件中有這倆jar,如果你下載了lucene-4.3.1,解壓後在lucene-4.3.1\analysis\common和lucene-4.3.1\core中可以找到這倆jar包)
開始部署:
第一:能通過http://localhost:7080/solr/ 正常訪問solr(包含三種solr/home的配置方式的介紹)
1.F盤下新建winsolr文件夾,將下載的Tomcat壓縮包考進winsolr,(若能保證此Tomcat端口與本機其他Tomcat端口不衝突則不需改端口)解壓後修改tomcat\conf下的server.xml文件將Server port=“”端口改爲:7005
protocol="HTTP/1.1" 的port改爲:7080
2.保證tomcat啓動及環境正常
3.將下載的 solr-4.3.1.zip 解壓 ,將solr-4.3.1\dist\solr-4.3.1.war文件複製到tomcat的webapps目錄下,並將文件命名爲solr.war
注:war是一個完整的web應用程序,包括了solr的jar文件和所有運行Solr所依賴的Jar文件,Jsp和很多的配置文件與資源文件。
4.修改tomcat\conf下的server.xml文件
<Connector port="7080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" />
增加URIEncoding="UTF-8" 中文支持。
5.配置solr/home(可以有三種方式,這裏是用基於JNDI的方式實現)
方式一:基於JNDI的方式
1).F:\winsolr下新建solr_home文件夾
2).複製solr-4.3.1\example下的solr文件夾到F:\winsolr\solr_home裏。注:該目錄爲solr的應用環境目錄。
3).在F:\winsolr\solr_home\solr\collection1下新建data目錄
4).修改F:\winsolr\solr_home\solr\collection1\conf裏的solrconfig.xml文件中的dataDir一行內容爲:
<dataDir>${solr.data.dir:F:\winsolr\solr_home\solr\collection1\data}</dataDir>
注:目的是爲了指定存放索引數據的路徑。(F:\winsolr\solr_home\solr\collection1\data 這個 data 目錄需要自己創建 也可以任意指定路徑)。在4.3.1版本中 solr下面沒有了 conf文件 多了一個 collection1,在solr.xml配置文件中
<em> <cores adminPath="/admin/cores" defaultCoreName="collection1" host="${host:}" hostPort="${jetty.port:8983}" hostContext="${hostContext:solr}" zkClientTimeout="${zkClientTimeout:15000}"> <core name="collection1" instanceDir="collection1" /> </cores> </solr></em>
明確指出了 conf的位置 也可以修改 <core name="collection1" instanceDir="collection1" /> 改變其目錄路徑 ,默認加載 conf文件下面的內容。
5).新建tomcat\conf\Catalina\localhost目錄 在此目錄下新建solr.xml文件,文件中增加
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="F:\winsolr\apache-tomcat-7.0.37\webapps\solr.war" debug="0" crossContext="true"> <Environment name="solr/home" type="java.lang.String" value="F:\winsolr\solr_home\solr" override="true"/> </Context>
注:其中docBase爲tomcat的webapps下的solr.war完整路徑。Environment的value屬性的值爲存放solr索引的文件夾。
6).將 solr-4.3.1\example\lib\ext下的所有jar文件複製到tomcat\lib下重啓tomcat。
注:不然會報404頁面找不到
7).重啓Tomcat,訪問 http://localhost:7080/solr 訪問成功說明配置正常完成,如圖:
注:查看 solr的logging會出現:
19:44:42 WARN SolrResourceLoader Can't find (or read) directory to add to classloader: ../../../contrib/extraction/lib (resolved as: F:\winsolr\solr_home\solr\collection1\..\..\..\contrib\extraction\lib).
這樣的警告;其實這是因爲找不到 對應的jar包造成的。完成接下來的配置這個警告就會消失。
方式二:基於當前路徑的方式
這種情況需要在F:\winsolr\solr_home\目錄下去啓動tomcat,Solr查找./solr,因此在啓動時候需要切換到F:\winsolr\solr_home\
方式三:基於環境變量的方式
windows在環境變量中建立solr.home,值爲F:\winsolr\solr_home\
linux在當前用戶的環境變量中(.bash_profile)或在catalina.sh中添加如下環境變量export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=F:\winsolr\solr_home\solr"
第二:實現三種中文分詞器的安裝,包括:smartcn 分詞器、IK 分詞器、mmseg4j分詞器
(smartcn 、mmseg4j建議讀者在完成擴展詞和拼音分詞以後再試,以免中間出錯影響擴展詞和拼音分詞的體驗)
A:IK 分詞器安裝
1.將之前解壓的solr-4.3.1 下的contrib和dist 文件夾複製到F:\winsolr\solr_home\solr\collection1下
2.將下載的IKAnalyzer的發行包解壓,解壓後將IKAnalyzer2012FF_u1.jar(分詞器jar包)複製到F:\winsolr\solr_home\solr\collection1\contrib\analysis-extras\lib下
3.在F:\winsolr\apache-tomcat-7.0.37\webapps\solr\WEB-INF下新建classes文件夾
4.將IKAnalyzer解壓出來的IKAnalyzer.cfg.xml(分詞器配置文件)和 Stopword.dic(分詞器停詞字典,可自定義添加內容)複製到
F:\winsolr\apache-tomcat-7.0.37\webapps\solr\WEB-INF\classes中
5.在F:\winsolr\solr_home\solr\collection1\conf下的schema.xml文件中fieldType name="text_general"這個地方的上方添加以下內容
<!--配置IK分詞器-->
<fieldType name="text_ik"class="solr.TextField">
<!--索引時候的分詞器-->
<analyzer type="index" isMaxWordLength="false"class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<!-- 查詢時候的分詞器 -->
<analyzer type="query" isMaxWordLength="true"class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
並將<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>中的type值改爲text_ik
6.修改F:\winsolr\solr_home\solr\collection1\conf下的solrconfig.xml文件,指定jar包路徑
將
<lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />
改爲:
<lib dir="F:\winsolr\solr_home\solr\collection1\contrib\analysis-extras\lib" regex=".*\.jar" />
<lib dir="F:\winsolr\solr_home\solr\collection1\contrib\extraction\lib" regex=".*\.jar" />
<lib dir="F:\winsolr\solr_home\solr\collection1\dist\" regex="solr-cell-\d.*\.jar" />
<lib dir="F:\winsolr\solr_home\solr\collection1\contrib\clustering\lib\" regex=".*\.jar" />
<lib dir="F:\winsolr\solr_home\solr\collection1\dist\" regex="solr-clustering-\d.*\.jar" />
<lib dir="F:\winsolr\solr_home\solr\collection1\contrib\langid\lib\" regex=".*\.jar" />
<lib dir="F:\winsolr\solr_home\solr\collection1\dist\" regex="solr-langid-\d.*\.jar" />
<lib dir="F:\winsolr\solr_home\solr\collection1\contrib\velocity\lib" regex=".*\.jar" />
<lib dir="F:\winsolr\solr_home\solr\collection1\dist\" regex="solr-velocity-\d.*\.jar" />
現在來驗證下是否添加成功:
首先啓動solr服務,啓動過程中如果出錯,一般有三個原因:
一是配置的分詞器jar找不到,也就是你沒有複製jar包到\solr\contrib\analysis-extras\lib目前下;
二是solrconfig.xml文件指定的jar路徑有誤。
三是分詞器版本不對導致的分詞器接口API不一樣出的錯,要是這個錯的話就在檢查分詞器的相關文檔,看一下支持的版本是否一樣.
如果在啓動過程中沒有報錯的話說明配置成功了.
接下來我們重啓Tomcat,進入到http://localhost:7080/solr地址進行測試一下剛加入的中文分詞器.
在首頁的Core Selector中選擇你配置的Croe後點擊下面的Analysis,
在Field Value (Index)裏輸入:中國人
在Analyse Fieldname / FieldType:裏選擇text,然後點擊右面Analyse Values
如果分出 中國人 中國 國人這三個詞 說明IK 分詞器安裝成功!如圖:
B:mmseg4j分詞器安裝
1.將下載的mmseg4j的發行包解壓,將解壓出的mmseg4j-analysis-1.9.1.jar mmseg4j-core-1.9.1.jar mmseg4j-solr-1.9.1.jar
這三個jar包複製到F:\winsolr\solr_home\solr\collection1\contrib\analysis-extras\lib中
2.在F:\winsolr\solr_home\solr\collection1\conf下的schema.xml文件中fieldType name="text_general"這個地方的上方添加以下內容
<!--配置mmseg4j分詞器-->
<fieldType name="text_msg"class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<!--索引時候的分詞器-->
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<!-- 查詢時候的分詞器 -->
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory"/>
</analyzer>
</fieldType>
如果要引用,同IK配置一樣,將field標籤中的 type值改爲text_msg即可。
3.修改solrconfig.xml文件(和IK配置同樣)
現在來驗證下是否成功:
重啓Tomcat
接下來我們可以進入到http://localhost:7080/solr地址進行測試一下剛加入的中文分詞器.
Analyse Fieldname / FieldType:選text,測試內容爲:中華人民共和國
如果分出 中華人民共和國中華人民中華華人人民共和國 人民 共和國 等詞 說明mmseg4j分詞器安裝成功!
C: smartcn 分詞器安裝(smartcn的分詞準確率不錯,但就是不能自己定義新的詞庫)
1.將之前解壓的solr-4.3.1下contrib\analysis-extras\lucene-libs中的lucene-analyzers-smartcn-4.3.1.jar包
複製到F:\winsolr\solr_home\solr\collection1\contrib\analysis-extras\lib中
2.修改schema.xml文件,在fieldType name="text_general"這個地方的上方添加以下內容
<fieldType name="text_smartcn"class="solr.TextField" positionIncrementGap="0">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>
<filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>
<filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>
</analyzer>
</fieldType>
如果要引用,同IK配置一樣,將field標籤中的 type值改爲text_smartcn即可
3.修改solrconfig.xml文件(和IK配置同樣)
好啦!自己測吧,記得重啓Tomcat,以及Analyse Fieldname / FieldType:選text
第三:實現中英停詞器、sogou詞庫、擴展詞庫的安裝
1.將從附件中下載的中文停詞詞庫,和sogou詞庫複製到F:\winsolr\apache-tomcat-7.0.37\webapps\solr\WEB-INF\classes中
2.新建ext.dic文件,在裏面寫入: 閔行 陳華芝 這兩個詞,格式和中文停詞詞庫、sogou詞庫格式一樣。
3.將ext.dic文件用UltraEdit工具打開並另存(不改文件名),另存時將保存類型選爲:所有文件(*.*),編碼選爲:UTF-8 - 無BOM,然後將另存的這個文件複製到
F:\winsolr\apache-tomcat-7.0.37\webapps\solr\WEB-INF\classes中
4.修改F:\winsolr\apache-tomcat-7.0.37\webapps\solr\WEB-INF\classes中的IKAnalyzer.cfg.xml文件
在entry標籤中增加中文停詞庫 和 sogou詞庫,以及將entry key="ext_dict"標籤的註釋去掉 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 擴展配置</comment>
<!--用戶可以在這裏配置自己的擴展字典 -->
<entry key="ext_dict">ext.dic;</entry>
<!--用戶可以在這裏配置自己的擴展停止詞字典-->
<entry key="ext_stopwords">stopword.dic;stopword_chinese.dic;words.dic;</entry>
</properties>
現在來驗證下是否成功:
重啓Tomcat,進入到http://localhost:7080/solr地址進行測試(記得Analyse Fieldname / FieldType:選text)
測試內容爲:閔行,a陳華芝。是的
如果分出: 閔行 陳華芝 這兩個詞,說明擴展詞庫和中英停詞器配置成功!你也可以試試sogou詞庫
(建議試完之後把sogou詞庫去掉,即把words.dic從IKAnalyzer.cfg.xml文件中去除,不然會影響IK分詞的實現)
如圖:
第四:簡單介紹下拼音分詞器的安裝
1.將附件中的四個jar複製到F:\winsolr\solr_home\solr\collection1\contrib\analysis-extras\lucene-libs中
2.在F:\winsolr\solr_home\solr\collection1\conf下的solrconfig.xml文件中添加lib指定jar路徑:
<lib dir="F:\winsolr\solr_home\solr\collection1\contrib\analysis-extras\lucene-libs" regex=".*\.jar" />
3.在F:\winsolr\solr_home\solr\collection1\conf下的schema.xml文件中fieldType name="text_general"這個地方的上方添加
<!--text_pinyin text_pinyin text_pinyin text_pinyin text_pinyin text_pinyintext_pinyintext_pinyintext_pinyintext_pinyin-->
<fieldType name="text_pinyin"class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>
<filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>
<filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" />
<filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>
<filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>
<filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" />
<filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" />
</analyzer>
</fieldType>
然後添加field
<field name ="pinyin" type ="text_pinyin" indexed ="true" stored ="false" multiValued ="false"/>
現在來驗證下是否成功:
重啓Tomcat測試(別忘了Analyse Fieldname / FieldType:裏選擇pinyin):
測試內容:中國人
如果出現:分出的拼音詞 z zh zho zhon 等說明配置成功!如圖: