2015年6月26日 星期五

Ubuntu 上的 Drupal Apache Solr 4.9 & IKAnalyzer 中文分詞配置


durpal&solr
這次安裝的系統是Ubuntu 12.04 Server版,Apache Solr IKAnalyzer 都沒變,不過環境和之前不一樣,把過程記錄下來,供大家參考。
  
注意:如果你在接下來的過程中有直接複製粘貼代碼的操作,粘貼後要將引號替換成英文引號。
  
步驟
·      1相關程式下載
·      2安裝jdk 7
·      3安裝Jetty 9
·      4安裝Solr 4.9
·      5Solr多核配置
·      7配置中文分詞
  

1、首先是下載相關程式
大家可以直接通過伺服器下載,也可以本地上傳,當然,如果你能去機房用U盤掛載讀取也是可以的。下面是下載連結以及網盤位址:
·      Apache Solr 4.9網盤下載Apache Solr 4.9 密碼: mi4i
·      其他Apache Solrhttp://archive.apache.org/dist/lucene/solr/
·      Jetty 9網盤下載Jetty 9 密碼: xbv0
·      IKAnalyzer 2012FF_hf1.ziphttps://code.google.com/p/ik-analyzer/
·      IKAnalyzer 2012FF_hf1.zip網盤下載IKAnalyzer 2012FF_hf1.zip 密碼: utqv
·      修改後的jar包:IKAnalyzer2012FF_u1_custom.jar 密碼: 6bjm
  

2、接下來安裝jdk 7
因為 Jetty 9 的運行需要java環境,如果你的 ubuntu 上有安裝且不低於jdk 7就可以跳過這一步了,如果你沒有安裝過,那就先安裝一個,很簡單的:
1.   sudo apt-get install -y openjdk-7-jdk   
2.   sudo mkdir -p /usr/java   
3.   sudo ln -s /usr/lib/jvm/java-7-openjdk-i386 /usr/java/default   
4.   echo “export JAVA_HOME=/usr/java/default” >> ~/.profile  
上面第三行命令呢是32位元系統下的,如果是64位元的系統,路徑就應該是/usr/lib/jvm/java-7-openjdk-amd64
  

3、現在安裝Jetty 9
首先進入到Jetty壓縮包所在的資料夾,解壓到/opt下,之後設置$JETTY_HOME,創建一個jetty用戶並設置為$JETTY_HOME的所有人。
1.   tar zxvf jetty-distribution-9.2.3.v20140905.tar.gz -C /opt   
2.   mv /opt/jetty-distribution-9.2.3.v20140905/ /opt/jetty/   
3.   echo “export JETTY_HOME=/opt/jetty/” >> ~/.profile   
4.   sudo useradd jetty -U -s /bin/false  
5.   sudo chown -R jetty:jetty /opt/jetty  
複製jetty.sh/etc/init.d/下,讓它作為一個服務運行。
1.   sudo cp -a /opt/jetty/bin/jetty.sh /etc/init.d/jetty  
/etc/default下創建Jetty設定檔
1.   sudo nano /etc/default/jetty  
並粘貼下面代碼,注釋記得去掉:
1.   JAVA_HOME=/usr/java/default # Java 路徑
2.   JETTY_HOME=/opt/jetty  # Jetty 路徑
3.   NO_START=0 設置為0,允許jetty開啟
4.   JETTY_HOST=0.0.0.0 設置0.0.0.0,則IPlocalhost都可以訪問
5.   JETTY_USER=jetty 作為該用戶運行
保存後就可以開啟Jetty
1.   sudo service jetty start  
當看到提示:Starting Jetty: OK 時,說明開啟成功。我們訪問http://localhost:8080/試試。
提示有錯誤:Error 404 - Not Found  No context on this server matched or handled this request. Contexts known to this server are
查看了一下,因為/opt/jetty/webapps/下面是空的,複製下面的檔就好了。
1.   sudo cp -R /opt/jetty/demo-base/webapps /opt/jetty/  
  
附:如果想要jetty開機啟動,下面命令搞定
1.   sudo update-rc.d jetty defaults  
如果想更改Jetty埠,編輯$JETTY_HOME下的start.d/http.ini,修改jetty.port
1.   sudo nano /opt/jetty/start.d/http.ini  
1.   module=http   
2.   ## HTTP Connector Configuration
3.   jetty.port=8080   
4.   http.timeout=30000  

4、安裝Solr 4.9
終於開始配置Solr了,首先第一步當然還是解壓縮,位置任意
1.   sudo tar zxvf solr-4.9.0.tgz -C /tmp  
複製.war包到$JETTY_HOME下的webapps資料夾,複製example/solr/optdist資料夾和contrib資料夾也是必需的。
1.   sudo cp -a solr-4.9.0/dist/solr-4.9.0.war /opt/jetty/webapps/solr.war   
2.   sudo cp -a solr-4.9.0/example/solr /opt/solr   
3.   sudo cp -a solr-4.9.0/dist /opt/solr   
4.   sudo cp -a solr-4.9.0/contrib /opt/solr  
複製context和一些模組以確保solrjetty上正確運行
1.   sudo cp -a solr-4.9.0/example/contexts/solr-jetty-context.xml /opt/jetty/webapps/solr.xml   
2.   sudo cp -a solr-4.9.0/example/lib/ext/* /opt/jetty/lib/ext/  
添加下面代碼到jetty 設置檔第一行
1.   sudo nano /etc/default/jetty  
1.   JAVA_OPTIONS=“-Dsolr.solr.home=/opt/solr $JAVA_OPTIONS”
修改solrconfig.xml裡面的路徑,確保solr能讀取到改變結構後的contribdist下的檔
1.   sudo nano /opt/solr/collection1/conf/solrconfig.xml  
1.   <lib dir=“../../contrib/extraction/lib” regex=“.*.jar” />   
2.   <lib dir=“../../dist/” regex=“solr-cell-d.*.jar” />   
  
3.   <lib dir=“../../contrib/clustering/lib/” regex=“.*.jar” />   
4.   <lib dir=“../../dist/” regex=“solr-clustering-d.*.jar” />   
  
5.   <lib dir=“../../contrib/langid/lib/” regex=“.*.jar” />   
6.   <lib dir=“../../dist/” regex=“solr-langid-d.*.jar” />   
  
7.   <lib dir=“../../contrib/velocity/lib” regex=“.*.jar” />   
8.   <lib dir=“../../dist/” regex=“solr-velocity-d.*.jar” />  
更改solr的用戶組
1.   sudo chown -R jetty:jetty /opt/solr  
OK,現在可以重啟jetty了,solr訪問位址:http://localhost:9090/solr
1.   sudo service jetty restart  
注意:我在本地測試的時候,用chrome打開solr會一直緩衝,有內容載入不完全,換其他流覽器就好了
  

5Solr的多核配置
1.   cd /opt/solr/   
2.   sudo mv collection1/ core0/   
3.   sudo cp -R core0/ core1/   
4.   cd core1/   
5.   sudo nano core.properties  
修改name值為資料夾名稱
1.   name=core1  
保存後記得修改用戶組,並重啟jetty。多核地址:
  

6、為Drupal網站安裝配置apachesolr
下載安裝後apachesolr後,開啟Apache Solr searchApache Solr framework
複製apachesolr模組的設定檔,粘貼到/opt/solr。具體命令:
1.   cd sites/all/modules/apachesolr/solr-conf/solr-4.x   
2.   sudo cp *.* /opt/solr/collection1/conf/  
修改用戶組,重啟Jetty,之後訪問http://your.drupal.site/admin/config/search/apachesolr/settings,點擊Add search environment(添加搜索環境),Solr Server Url 填寫你的搜索核心的地址:http://localhost:8080/solr/core0。保存之前可以點擊下面的Test connect(測試連結)用來測試一下,提示Your site has contacted the Apache Solr server則說明連接成功。接下來研究中文分詞。
  

7drupal 的中文分詞
之前有講過IKAnalyzer中文分詞的配置方法以及自訂修改,詳情:
檔這部分還是使用IKAnalyzer 2012FF_hf1.zip以及我修改過的IKAnalyzer2012FF_u1_custom.jar,下面是具體方法
/opt/solr/下創建兩個資料夾,lib/classes/,然後將IKAnalyzer2012FF_u1_custom.jar放在lib下,將IKAnalyzer.cfg.xmlstopword.dic放在classes
1.   sudo mkdir /opt/solr/lib   
2.   sudo mkdir /opt/solr/classes   
3.   sudo cp IKAnalyzer2012FF_u1_custom.jar /opt/solr/lib/   
4.   sudo cp IKAnalyzer.cfg.xml /opt/solr/classes/   
5.   sudo cp stopword.dic /opt/solr/classes/  
這裡我們沒有把.jar檔放在/opt/jetty/solr-webapp/webapp/WEB-INF/lib/下的原因是jetty啟動時會將/opt/jetty/webapps/solr.war解壓到這裡,我們的分詞.jar會被刪掉。
之後修改schema.xml文件
1.   sudo nano /opt/solr/core0/conf/schema.xml  
在開頭的位置,找到下面這行代碼,將version的值改為1.5
1.   <schema name=“drupal-4.3-solr-4.x” version=“1.3”>
這裡修改的原因讓Solr先對搜索的短語進行分詞然後再搜索。版本為1.3時,搜索的短語solr不進行分詞,而是直接搜索,也就是你在搜索欄輸入什麼,solr就搜索什麼,是完全匹配搜索,這對我們是沒有意義的。版本修改為1.5之後,solr會先對搜索欄裡的詞或句子進行分詞處理,之後根據分詞結果搜索。而這就是我們想要的結果和搜索方式。
接下來在types標籤內添加分詞處理代碼:
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>
fields標籤內找到 name=label field,如下,然後修改type為:text_ik,也就是上面分詞的fieldTypename。類似的還有content等欄位。
1.   <field name=“label” type=“text” indexed=“true” stored=“true” termVectors=“true” omitNorms=“true”/>
修改為
2.   <field name=“label” type=“text_ik” indexed=“true” stored=“true” termVectors=“true” omitNorms=“true”/>
在最後我們來到檔的末尾,將默認操作符改為OR
1.   <solrQueryParser defaultOperator=“AND”/>
修改為
2.   <solrQueryParser defaultOperator=“OR”/>