Apache Solr介紹及安裝

Solr是什麼

Solr是一個基於Lucene java庫的企業級搜索服務器,包含XML/HTTP,JSON API,高亮查詢結果,緩存,複製,還有一個WEB管理界面。Solr運行在Servlet容器中,其架構以下:java

輸入圖片說明

主要功能包括全文檢索,高亮命中,分面搜索(faceted search),近實時索引,動態集羣,數據庫集成,富文本索引,空間搜索;經過提供分佈式索引,複製,負載均衡查詢,自動故障轉移和恢復,集中配置等功能實現高可用,可伸縮和可容錯。web

Solr和Lucene的本質區別有如下三點:搜索服務器、企業級和管理。Lucene本質上是搜索庫,不是獨立的應用程序,而Solr是。Lucene專一於搜索底層的建設,而Solr專一於企業應用。Lucene不負責支撐搜索服務所必須的管理,而Solr負責。因此說Solr是Lucene面向企業搜索應用的擴展。數據庫

Solr目前有不少用戶了,比較著名的用戶有 AOL、 Disney、 Apple等,國內的有淘寶,淘寶的終搜就是基於Solr改造的,終搜用於淘寶的SNS、淘女郎等處的搜索。apache

安裝和部署

1. 下載瀏覽器

官方網址:http://lucene.apache.org/solr/緩存

下載地址:http://archive.apache.org/dist/lucene/solr/tomcat

2. 安裝與配置服務器

以solr-4.4.0爲例,解壓以後的目錄以下:架構

➜  solr-4.4.0  tree -L 1
.
├── CHANGES.txt
├── contrib
├── dist
├── docs
├── example
├── licenses
├── LICENSE.txt
├── NOTICE.txt
├── README.txt
└── SYSTEM_REQUIREMENTS.txt

5 directories, 5 files

solr提供一個war包能夠運行web界面,該文件位於exmaple/webapps目錄下,發佈該war包以前須要配置solr home,solr home是索引和配置文件所在的目錄。app

solr home的設置有好幾種方式:

(1)、基於環境變量solr.solr.home

直接修改JAVA全局環境變量

export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/tmp/solrhome"

你也能夠修改TOMCAT_HOME/bin/catalina.sh,在文件開頭添加:

JAVA_OPTS='-Dsolr.solr.home=/tmp/solrhome'

或者,在啓動時進行設置。start.jar在源碼包中能夠找到,內部包含jetty容器。

$ java -Dsolr.solr.home=/tmp/solrhome -jar start.jar

(2)、基於JNDI配置

修改war中的web.xml文件,取消下面對下面的注視,並修改env-entry-value的值。

<env-entry>
   <env-entry-name>solr/home</env-entry-name>
   <env-entry-value>/tmp/solrhome</env-entry-value>
   <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

或者,建立solr.xml文件放於TOMCAT_HOME/conf/Catalina/localhost,內容以下:

<?xml version="1.0" encoding="utf-8"?>
<Context docBase="TOMCAT_HOME/webapps/solr.war" debug="0" crossContext="true">
   <Environment name="solr/home" type="java.lang.String" value="/tmp/solrhomehome" override="true"/>
</Context>

(3)、基於當前路徑的方式

這種狀況須要在example目錄下去啓動tomcat,Solr查找./solr,所以在啓動時候須要切換到example目錄下面

3. 在Jetty上運行Solr

在example目錄下,運行下面命令便可啓動一個內置的jetty容器:

$ java -Dsolr.solr.home=/tmp/solrhome -jar start.jar

經過http://localhost:8983/solr便可訪問。

4. 在tomcat中運行Solr

將example/webapps/solr.war拷貝到tomcat的webapps目錄下,而後參照上面的說明設置solr home值。tomcat版本可使用tomcat-6.0.36。

其次,將example/lib/ext目錄中的jar包拷貝到tomcat-6.0.36/webapps/solr/WEB-INF/lib目錄下。

而後,將example/resources/log4j.properties也拷到classpath,或者在tomcat-6.0.36/webapps/solr/目錄下新建了一個classes目錄,將log4j.properties放進去。

這時候啓動tomcat後訪問http://localhost:8080/solr會提示錯誤,這是由於solr home目錄下沒有solr的配置文件和一些目錄。請將solr-4.4.0/example/solr/目錄下的文件拷貝到solr home目錄下,例如:

$ cp -r solr-4.4.0/example/solr/ /tmp/solrhome/

最後,啓動tomcat,而後經過瀏覽器訪問。

5. 其餘

關於中文支持

關於中文,solr內核支持UTF-8編碼,因此在tomcat裏的server.xml須要進行配置

<Connector port="8080" maxHttpHeaderSize="8192" URIEncoding="UTF-8" />

另外,向solr Post請求的時候須要轉爲utf-8編碼。對solr 返回的查詢結果也須要進行一次utf-8的轉碼。檢索數據時對查詢的關鍵字也須要轉碼,而後用「+」鏈接。

String[] array = StringUtils.split(query, null, 0);
for (String str : array) {
    result = result + URLEncoder.encode(str, "UTF-8") + "+";
}
相關文章
相關標籤/搜索