標籤:Lucene style blog http io os 使用 ar java
最近準備用Solr搭建項目,所以對其作了一些瞭解,我採用的是Solr4.4版本;這個版本的Solr相對於以前的版本改變很大,這裡記一下自己安裝與配置的過程。
網上很多關於Solr的教程都很老了,很多教程居然還是基於Solr1.3或者1.4版本在講解,有些資料的內容看了再對比目前的版本會不知所云。
盡量多看官方提供的wiki文檔:http://wiki.apache.org/solr/
Solr簡介
這裡貼一段關於solr的簡介:
Solr是一個基於Lucene的Java搜尋引擎伺服器。Solr 提供了層面搜尋、命中醒目顯示並且支援多種輸出格式(包括 XML/XSLT 和 JSON 格式)。它易於安裝和配置,而且附帶了一個基於 HTTP 的管理介面。Solr已經在眾多大型的網站中使用,較為成熟和穩定。Solr 封裝並擴充了 Lucene,所以Solr的基本上沿用了Lucene的相關術語。更重要的是,Solr 建立的索引與 Lucene 搜尋引擎庫完全相容。通過對Solr 進行適當的配置,某些情況下可能需要進行編碼,Solr 可以閱讀和使用構建到其他 Lucene 應用程式中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 建立的索引。
下載解壓
官方網址:http://lucene.apache.org/solr/
下載列表:http://www.apache.org/dyn/closer.cgi/lucene/solr/4.4.0
將下載得到的solr-4.4.0.zip壓縮包解壓,會看到如下目錄結構:
其中對我們有用的是example和dist目錄中的內容。
安裝與配置
首先將exmaple/webapps中的solr.war包解壓開複製到Tomcat的webapps中,或者直接將solr.war包直接複製到Tomcat的webapps中,然後啟動Tomcat使其解壓開再將war包刪除。這時如果啟動Tomcat是會報錯的,因為我們沒有設定solr_home(也就是索引和設定檔所在的目錄)。
下面配置一下:
solr_home的設定有好幾種方式,百度一下就可以了,這裡我採用的是在solr應用的web.xml檔案中配置的方式。開啟solr/WEB-INF/web.xml檔案,找到如下內容:
[html] view plaincopy
- <env-entry>
- <env-entry-name>solr/home</env-entry-name>
- <env-entry-value>../webapps/solr/solr_home</env-entry-value>
- <env-entry-type>java.lang.String</env-entry-type>
- </env-entry>
這段內容初始時是被注釋了的,解開注釋後將<env-entry-value>節點內容改為自己磁碟上某個位置即可,這裡我採用的是相對位置,絕對位置當然也是可以的。
配置完了還需要在配置的路徑處放置一個檔案夾作為SOLR_HOME(solr的example中已經提供),我們將example/solr目錄拷貝到solr項目目錄下(這裡是%TOMCAT_HOME%/webapps/solr/),並重新命名為solr_home(根據自己的配置決定)。
配置日誌輸出
這時如果啟動Tomcat(通過調用startup.sh指令碼),仍然無法正常啟動,而且錯誤只有幾行,如下所示:
[java] view plaincopy
- 2013-8-9 15:49:05 org.apache.catalina.core.StandardContext start
- 嚴重: Error filterStart
- 2013-8-9 15:49:05 org.apache.catalina.core.StandardContext start
- 嚴重: Context [/solr] startup failed due to previous errors
給出的錯誤資訊不明不白,這時如果我們換一種方式來啟動Tomcat就會發現錯誤輸出了,在命令列將目前的目錄切換到%TOMCAT_HOME%/bin,執行如下的命令:
[java] view plaincopy
- java -jar bootstrap.jar
這樣可以看到命令列輸出如下的異常資訊(省略部分內容):
很顯然,提示我們找不到日誌相關的jar包,還提示我們去看solr的相關wiki連結:http://wiki.apache.org/solr/SolrLogging
到該Wiki頁面中我們會找到如下幾段文字說明:
上面解釋了在新版本的solr中日誌輸出方面做了什麼變動,以及如何解決。
首先複製example/lib/ext目錄中的jar包到項目的classpath下,這裡的example就是前面解壓solr壓縮包得到的,solr應用war包也是從該目錄下得到的;我們可以將這些jar包放到%TOMCAT_HOME%/lib下,也可以將它們放到項目的lib下(在我的電腦上是/opt/tomcat-6.0.37/webapps/solr/WEB-INF/lib);
然後將example/resources/log4j.properties也拷到classpath(我在/opt/tomcat-6.0.37/webapps/solr/目錄下建立了一個classes目錄,放log4j.properties放了進去);
然後再啟動Tomcat,這時就沒有異常拋出了,solr成功啟動,我們通過瀏覽器進行訪問,你將會看到如下畫面:
在Solr中使用中文分詞
使用全文檢索索引,中文分詞是離不開的,這裡我採用的是mmseg4j分詞器。mmseg4j分詞器內建了對solr的支援,最新版本可支援4.X版本的sorl,使用起來很是方便。
GoogleCode地址:http://code.google.com/p/mmseg4j/
使用mmseg4j中文分詞器,首先需要在schema.xml檔案中配置一個fieldType節點(其它的中文分詞器也類似),如下所示:
[html] view plaincopy
- <!-- 中文分詞 -->
- <fieldType name="text_zh" class="solr.TextField" positionIncrementGap="100">
- <analyzer>
- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" />
- </analyzer>
- </fieldType>
然後就可以在field節點中引用該filedType了,定義樣本filed節點如下:
[html] view plaincopy
- <field name="title" type="text_zh" indexed="true" stored="true" multiValued="true"/>
- <field name="content" type="text_zh" indexed="true" stored="false" multiValued="true"/>
然後在瀏覽器裡試一下效果:
總結
下面總結一下Solr4.4.0的安裝與配置步驟:
- 準備Java和Tomcat;
- 下載並解壓solr-4.4.4.zip得到solr-4.4.0目錄;
- 拷貝solr-4.4.0/example/webapps/solr.war包到%Tomcat_Home%/webapps目錄,啟動Tomcat使其解壓,刪除solr.war包;
- 開啟%Tomcat_Home%/webapps/solr/WEB-INF/web.xml檔案,配置SOLR_HOME,按照SOLR_HOME的配置拷貝solr-4.4.0/example/solr目錄(該目錄即作為solr_home);
- 拷貝solr-4.4.0/example/lib/ext下所有的jar包到項目的classpath下,同時拷貝log4j.properties設定檔到classpath;
- 配置中文分詞器。
Solr4.4的安裝與配置