最近公司招新人,有兩位應屆碩士生同學過來面試。一看簡歷上,都有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 創建的索引。
1.1、什麼是lucene?
Lucene是一個基於Java的全文信息檢索工具包,它不是一個完整的搜索應用程序,而是爲你的應用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta(雅加達) 家族中的一個開源項目。也是目前最爲流行的基於Java開源全文檢索工具包。目前已經有很多應用程序的搜索功能是基於 Lucene ,比如Eclipse 幫助系統的搜索功能。Lucene能夠爲文本類型的數據建立索引,所以你只要把你要索引的數據格式轉化的文本格式,Lucene 就能對你的文檔進行索引和搜索。
1.2、lucene和solr是什麼關係?
Solr與Lucene 並不是競爭對立關係,恰恰相反Solr 依存於Lucene,因爲Solr底層的核心技術是使用Lucene 來實現的,Solr和Lucene的本質區別有以下三點:搜索服務器,企業級和管理。Lucene本質上是搜索庫,不是獨立的應用程序,而Solr是。Lucene專注於搜索底層的建設,而Solr專注於企業應用。Lucene不負責支撐搜索服務所必須的管理,而Solr負責。所以說,一句話概括 Solr: Solr是Lucene面向企業搜索應用的擴展。
Solr使用Lucene並且擴展了它!
一個真正的擁有動態字段(Dynamic Field)和唯一鍵(Unique Key)的數據模式(Data Schema)
對Lucene查詢語言的強大擴展!
支持對結果進行動態的分組和過濾
高級的,可配置的文本分析
高度可配置和可擴展的緩存機制
性能優化
支持通過XML進行外部配置
擁有一個管理界面
可監控的日誌
支持高速增量式更新(Fast incremental Updates)和快照發布(Snapshot Distribution)
因爲solr是基於Lucene的,他們底層的概念都是一樣的。讀者如果初學solr,對lucene不瞭解的話,可以先大概瞭解一下lucene。以下有兩篇很好的關於lucene的介紹文章:
http://www.ibm.com/developerworks/cn/java/j-lo-lucene1/#ibm-pcon
http://www.ibm.com/developerworks/cn/java/wa-lucene/
爲了對文檔進行索引,Lucene 提供了五個基礎的類,他們分別是 Document, Field, IndexWriter, Analyzer, Directory。讀完以上兩篇文章,讀者應該瞭解這些基礎類有什麼作用。
二、solr的安裝:
2.1、下載工具
Solr 必須運行在Java1.6 或更高版本的Java 虛擬機中,運行標準Solr 服務只需要安裝JRE 即可,但如果需要擴展功能或編譯源碼則需要下載JDK 來完成。筆者用的是JDK1.6
solr需要運行在servlet服務器上,筆者用的是tomcat。版本的話,根據自己情況去選擇。筆者用的是6.0.37版本。
如果讀者打算下載源碼進行自行編譯的話,同時還需要下載Ant。但是需要注意的是,筆者寫本文時,最新版本的solr是4.10.2。但是運行ant進行編譯時,會提示jdk支持的最低版本是1.7,可是筆者不願意換jdk於是一直降低版本到4.7.2才發現只是1.6的jdk。
於是需要下載的工具如下:
JRE或JDK(1.6版本以上):http://java.sun.com/j2se/downloads.html
Ant 1.6.x 或更高版本
tomcat :http://tomcat.apache.org/
2.2、配置Ant
Solr是使用Ant進行管理的源碼, Ant是一種基於Java的build工具。理論上來說,它有些類似於Maven 或者是 C中的make。下載後解壓出來後,進行環境變量設置。
ANT_HOME:C:\apache-ant-1.9.4-bin (這裏爲你自己解壓縮的目錄)
PATH:%ANT_HOME%\bin (這個設置是爲了方便在dos環境下操作)
查看是否安裝成功,在命令行窗口中輸入命令ant,若出現結果:
說明ant安裝成功!因爲ant默認運行build.xml文件,這個文件需要我們建立。現在就可以進行build Solr源碼了。在命令行窗口中進入到你的Solr源碼目錄,輸入ant會出現當前build.xml使用提示信息。
當然,如果讀者自己的IDE已經有了Ant的話,可以在IDE裏自己build。
2.3、配置solr
2.3.1、目錄結構介紹
下載solr後,解壓壓縮包。解壓到F:\solr\solr-4.7.2。解壓之後的目錄結構如下:
contrib目錄裏都是相關擴展所需要的jar包;
dist也是相關jar包,但是最主要的文件是:solr的war包(solr-4.7.2.war);
docs是solr的相關介紹文檔(index.html包含了所有該版本已包含功能的介紹,而tutorial.html對solr的運行過程進行了介紹);
example是非常重要的一個目錄,它包含了相關示例程序:
\example-DIH ---數據庫做索引數據源的示例;
\exampledocs ---所有示例用的xml文件,作爲索引數據源;
\multicore ---實現多core的示例;
\solr ---一個非常完整的基礎示例;
licenses目錄裏保存了相關證書文件。
2.3.2、Tomcat下Solr安裝配置
A、Tomcat 配置文件conf\server.xml
添加編碼的配置 URIEncoding="UTF-8" (如不添加,中文檢索時因爲亂碼搜索不到)。
添加後爲:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
B、複製solr.war文件
複製F:\solr\solr-4.7.2\dist\solr-4.7.2.war到tomcat的webapps目錄下(筆者的目錄爲E:\apache-tomcat-6.0.37\webapps),並改名爲solr.war。解壓。
C、建立主目錄
根據自己情況,在磁盤上創建一個solr的主目錄。筆者創建在E:\solr-tomcat\solr,把F:\solr\solr-4.7.2\example\solr複製到該主目錄下。
Solr的安裝配置最爲麻煩的是對solr.solr.home(主目錄)的理解和配置,主要有3種:
基於環境變量solr.solr.home
在當前用戶的環境變量中添加如下環境變量
Dsolr.solr.home=E:\solr-tomcat\solr
基於JNDI配置
在tomcat的E:\apache-tomcat-6.0.37\conf\Catalina\localhost目錄下創建solr.xml ,內容如下:
<Context docBase="E:\apache-tomcat-6.0.37\webapps\solr.war" debug="0" crossContext="true" > <Environment name="solr/home" type="java.lang.String" value="E:\solr-tomcat\solroverride="true" /> </Context>
修改solr工程的web.xml文件
修改E:\apache-tomcat-6.0.37\webapps\solr\WEB-INF\web.xml文件:
<env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>E:\solr-tomcat\solr</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>
這樣,solr的基本配置都OK了。運行tomcat,在瀏覽器輸入http://localhost:8080/solr即可訪問solr的管理頁面。
下一篇博文,筆者將介紹solr的基本使用以及solr多core的配置。