2015年6月26日 星期五

Apache Solr 4.9 & IKAnalyzer

1Solr的簡單安裝
運行Solr需要安裝jdk,這裡略過。
Solr下載後,放到D盤根目錄下,然後點擊開始功能表,點擊運行,輸入cmd回車,輸入如下命令:
1.   C:UsersAdministrator>d:
2.   D:>cd solr-4.9.0/example
3.   D:>java -jar start.jar  
或者在solr-4.9.0下創建個啟動.bat,調試會方便些
1.   @echo off   
2.   title 啟動服務   
3.   cd example   
4.   java -jar start.jar   
5.   pause  
訪問http://localhost:8983/solr/,如下介面即代表solr安裝成功
QQ截图20140808212308
2Solr配置多核
進入solr-4.9.0example下,複製collection1資料夾並重命名為collection2,進入collection2conf,編輯core.properties檔,將name=collection1改為name=collection2,也就是複製後的資料夾名稱,多核就配置好了
3、配置IKAnalyzer中文分詞
通過上面的IKAnalyzer地址,下載IK Analyzer 2012FF_hf1.zip,將解壓後的IKAnalyzer2012FF_u1.jar放到solr-4.9.0examplesolr-webappwebappWEB-INFlib下,將IKAnalyzer.cfg.xmlstopword.dic放到solr-4.9.0examplesolr-webappwebappWEB-INFclasses下,沒有classes資料夾就創建一個。
打開solr-4.9.0examplesolrcollection1confschema.xml文件,粘帖如下代碼:
1.   <fieldType name=“text_ik” class=“solr.TextField”>  
2.       <analyzer class=“org.wltea.analyzer.lucene.IKAnalyzer”/>  
3.   </fieldType>  
4.     
5.   <field name=“ik” type=“text_ik” indexed=“true” stored=“true” multiValued=“false” />   
重啟伺服器,也就是啟動.bat,然後我們前往http://localhost:8983/solr/#/collection1/analysis,隨便打上一段話,比如“隨便打些漢字測試分詞效果”,記得Analyse Fieldname選擇我們剛剛配置的ik,點擊Analyse Values按鈕
QQ截图20140808221531
這樣就分詞成功了
下一次我們配置IKAnalyzer的細細微性分詞和智慧分詞
上一次我們成功配置了Solr搜索以及IKAnalyzer的中文分詞,但是在IKAnalyzer_2012FF_hf1版本的IKAnalyzer類中沒有讀取配置中的useSmart屬性,所以在建立索引和查詢索引中都使用的是細細微性分詞。網上找到了他人分享的方法,解決了這個問題。
方法是創建了兩個類IKAnalyzerWithSmart(默認智慧分詞)和IKAnalyzerWithoutSmart(默認細細微性分詞),再重新匯出jar包,將jar包放到solr-4.9.0examplesolr-webappwebappWEB-INFlib目錄下,並修改schema.xml檔內容如下,這樣就能夠在創建索引時使用智慧分詞,在查詢索引時使用細細微性分詞。
1.   <fieldType name=“text_ik” class=“solr.TextField”>
2.       <analyzer type=“index” class=“org.wltea.analyzer.lucene.IKAnalyzerWithSmart” />
3.       <analyzer type=“query” class=“org.wltea.analyzer.lucene.IKAnalyzerWithoutSmart” />
4.   </fieldType>
修改後的jar包下載:IKAnalyzer2012FF_u1_custom.jar 密碼: 6bjm
效果預覽

QQ截图20140810104844




相關步驟:
1、下載IKAnalyzer原始程式碼
原始程式碼檔案名:IK Analyzer 2012FF_hf1_source.rar,如果穀歌上不去可以下載網盤裡的,都一樣
·      穀歌下載地址:https://code.google.com/p/ik-analyzer/
·      百度網盤:點擊下載IK Analyzer 2012FF_hf1_source.rar 密碼: 701f


2、導入IKAnalyzer原始程式碼
這裡呢我們需要用到eclipse,如果電腦上沒有的話可以下載安裝一個
1)首先打開eclipse,選擇File>New>Project
QQ截图20140808231931
2)選擇Java>Java Project,點擊Next

QQ截图20140808232030
3)輸入Project nameIKAnalyzer_2012FF_hf1_custom,點擊Finish
4)打開解壓後的IKAnalyzer source資料夾,複製src下的org資料夾,拷貝到剛剛創建的java專案IKAnalyzer_2012FF_hf1_custom下的src目錄。刷新左側列表,發現有好多紅叉
QQ截图20140808233017
這是因為IKAnalyzer引用的jar包沒有被導入的關係,那麼我們來導入相關jar包。
3、導入相關jar
第一個錯誤是這裡,IKAnalyzer.java
QQ截图20140808233926
滑鼠放上去提示是:The import org.apache cannot be resolved,因為他這裡導入的是org.apache.lucene,所以要去下載Apache Lucene 4.9.0,下載後解壓。
·      百度網盤:點擊下載Apache Lucene 4.9.0 密碼: iybw
解壓後按右鍵項目名稱IKAnalyzer_2012FF_hf1_custom,選擇最下面的Properties,或者按快速鍵Alt+Enter,接下來選Java Build Path>Libraries>Add External JARs,找到我們剛剛解壓的Lucene資料夾,選擇lucene-4.9.0corelucene-core-4.9.0.jar這個jar檔,OK
QQ截图20140808233926
這樣就導入了一個jar包,接下來已同樣的方法導入下面兩個檔:
·      lucene-4.9.0queryparserlucene-queryparser-4.9.0.jar
·      lucene-4.9.0analysiscommonlucene-analyzers-common-4.9.0.jar
4、創建類
按右鍵org.wltea.analyzer.lucene包,選擇New>ClassName處填寫:IKAnalyzerWithSmart,點擊Finish


QQ截图20140809103232

QQ截图20140809103621
粘帖下面的代碼,IKAnalyzerWithSmart.java
1.   package org.wltea.analyzer.lucene;
  
2.   import java.io.Reader;
  
3.   import org.apache.lucene.analysis.Analyzer;
4.   import org.apache.lucene.analysis.Tokenizer;
  
5.   /**     
6.    * @Description: TODO  
7.    * @author houqirui   
8.    * @date 2014-8-1 下午5:01:57   
9.    */
10. public final class IKAnalyzerWithSmart extends Analyzer{
  
11.     private boolean useSmart = true;
  
12.     public boolean useSmart() {
13.         return useSmart;
14.     }   
  
15.     public void setUseSmart(boolean useSmart) {
16.         this.useSmart = useSmart;
17.     }   
  
18.     /**  
19.      * IK分詞器Lucene  Analyzer介面實現類  
20.      *   
21.      * 預設細細微性切分演算法  
22.      */  
23.     public IKAnalyzerWithSmart(){
24.         this(true);
25.     }   
  
26.     /**  
27.      * IK分詞器Lucene Analyzer介面實現類  
28.      *   
29.      * @param useSmart 當為true時,分詞器進行智慧切分  
30.      */  
31.     public IKAnalyzerWithSmart(boolean useSmart){
32.         super();
33.         this.useSmart = useSmart;
34.     }   
  
35.     /**  
36.      * 重載Analyzer介面,構造分片語件  
37.      */  
38.     @Override  
39.     protected TokenStreamComponents createComponents(String fieldName, final Reader in) {
40.         Tokenizer _IKTokenizer = new IKTokenizer(in , this.useSmart());
41.         return new TokenStreamComponents(_IKTokenizer);
42.     }   
43. }  
同樣的方法創建IKAnalyzerWithoutSmart類,IKAnalyzerWithoutSmart.java
1.   package org.wltea.analyzer.lucene;
  
2.   import java.io.Reader;
  
3.   import org.apache.lucene.analysis.Analyzer;
4.   import org.apache.lucene.analysis.Tokenizer;
  
5.   /**     
6.    * @Description: TODO  
7.    * @author houqirui   
8.    * @date 2014-8-1 下午5:01:57   
9.    */
10. public final class IKAnalyzerWithoutSmart extends Analyzer{
  
11.     private boolean useSmart = false;
  
12.     public boolean useSmart() {
13.         return useSmart;
14.     }   
  
15.     public void setUseSmart(boolean useSmart) {
16.         this.useSmart = useSmart;
17.     }   
  
18.     /**  
19.      * IK分詞器Lucene  Analyzer介面實現類  
20.      *   
21.      * 預設細細微性切分演算法  
22.      */  
23.     public IKAnalyzerWithoutSmart(){
24.         this(false);
25.     }   
  
26.     /**  
27.      * IK分詞器Lucene Analyzer介面實現類  
28.      *   
29.      * @param useSmart 當為true時,分詞器進行智慧切分  
30.      */  
31.     public IKAnalyzerWithoutSmart(boolean useSmart){
32.         super();
33.         this.useSmart = useSmart;
34.     }   
  
35.     /**  
36.      * 重載Analyzer介面,構造分片語件  
37.      */  
38.     @Override  
39.     protected TokenStreamComponents createComponents(String fieldName, final Reader in) {
40.         Tokenizer _IKTokenizer = new IKTokenizer(in , this.useSmart());
41.         return new TokenStreamComponents(_IKTokenizer);
42.     }   
43. }  
4、匯出jar文件
滑鼠按右鍵專案,Export>Java>JAR File>Next,點擊Browse,選擇jar存放的路徑,記得輸入檔案名,保存後點擊Finishjar檔匯出完畢。



沒有留言:

張貼留言