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") + "+"; }