Solr學習02:搭建Solr環境


一、安裝虛擬機

  Solr 必須運行在Java1.6 或更高版本的Java 虛擬機中,運行標准Solr 服務只需要安裝JRE 即可,但如果需要擴展功能或編譯源碼則需要下載JDK 來完成。可以通過下面的地址下載所需JDK 或JRE :
  OpenJDK ( http://java.sun.com/j2se/downloads.html
  Sun (http://java.sun.com/j2se/downloads.html
  IBM (http://www.ibm.com/developerworks/java/jdk/
  Oracle (http://www.oracle.com/technology/products/jrockit/index.html
  JDK的安裝步驟請參考相應的幫助文檔。

二、下載Solr

  在下載solr之前,需要先確定solr的版本, 目前最新版本是 4.10.1,但是在 4.8 以后需要編譯在1.7的版本。所以如果是JDK1.6環境,建議使用4.8之前的版本(例如4.7.2)。

  官網地址是:http://lucene.apache.org/solr/

  歸檔目錄是:http://archive.apache.org/dist/lucene/solr/

  如果我們要下載最新的solr版本,那么操作如下:

  1.打開apache官網http://www.apache.org/

  2.在首頁左下側Projects區域找到並進入Lucene項目; (地址是:http://lucene.apache.org/)

  3.點擊右上側黃色大按鈕,下載solr:

  4.打開的頁面提供一些下載源,我們使用官方推薦的地址下載:

  5.下載solr包;

  如果是windows環境可以直接下載zip格式包;如果是在linux環境,下載tgz格式包。

  復制地址下載:

[root@note~]# wget http://apache.fayea.com/apache-mirror/lucene/java/4.10.1/lucene-4.10.1.tgz

   解壓:

[root@note~]# tar -xvzf lucene-4.10.1.tgz 

  

  如果我們需要下載歷史版本(例如下載4.7版本),那么需要到歸檔目錄下載。

  1.打開solr歸檔目錄地址http://archive.apache.org/dist/lucene/solr/

  2.找到4.7.2版本的鏈接,點擊進入。

  3.下載需要的solr包:

 

三、Solr下載包重要目錄及文件說明

(Solr下載包重要目錄及文件說明,來源於README.txt文件)

contrib:solr功能模塊需要的庫,根據需要引用
dist:發布目錄
dist/solr-4.5.0.war:Solr web服務器,部署到tomcat或其他servlet容器中。
dist/solr--XX.jar:solr結合其他組件的中間包,至少需要包含核心包solr-core-XX.jar
  (http://wiki.apache.org/solr/SolrPlugins)
docs:Solr 文檔及教程目錄
  (入口訪問docs/index.html)
example:官方提供的Solr使用例子。
example-DIH(Data Import Handler),演示了如何從hsql數據庫導入數據到solr中;
example-schemaless,演示了無schema實例;
multicore,演示了如何使用多個core,可以理解每個core對應一個數據庫實體表,如檢索公司信息和產品信息,公司core和產品core分別使用自己的配置。當然也可以是不同數據庫中的表,供不同的項目使用。
solr,演示了單core(這里指collection1)的使用,我們一般使用時會在這個基礎上定制;
solr/collection1/conf目錄下主要是兩個配置文件:
schema.xml 用於定義索引庫的字段、字段類型及分詞器等(核心文件)
solrconfig.xml 定義了這個core的配置信息,如使用lucene的版本,log輸出,緩存策略等。

 

三、通過start.jar啟動solr

  主要用於在本機或測試服務器上搭建一個用於測試的solr。

  安裝:直接將下載的solr解壓到任意目錄,例如: D:\solr-4.7.2

  啟動:如果是window環境,雙擊D:\solr-4.7.2\example下的start.jar可以啟動。但是這種方式solr是在后台執行的 (不會彈出界面,只是在任務管理器可以看到多了一個進程) ,這種方式並不方便調試,無法判斷啟動中是否有錯誤。 推薦在命令行中啟動,輸出的LOG對查錯很有幫助。

D:\solr-4.7.2\example>java -jar start.jar 

  啟動后 D:\solr-4.7.2\example\webapps下的solr.war 會解到D:\solr-4.7.2\example\solr-webapp\webapp中。

  start.jar 使用的內置的Jetty服務器,他的入口是StartSolrJetty文件。 啟動之后默認端口是8983,如果想使用其他端口可以再啟動時候增加參數。

D:solr-4.7.2\example>java -Djetty.port=8080 -jar start.jar 

  或直接修改jetty的配置文件,D:\solr-4.5.1\example\etc\jetty.xml,將其中8983改成希望的端口。

  如果啟動時報異常:
  FAILED SocketConnector@0.0.0.0:8983: java.net.BindException: Address already in use: JVM_Bind 就說明當前端口占用中。需要換一個端口。    

  org.apache.solr.common.SolrException: Index locked for write for core collection1 或 org.apache.lucene.store.LockObtainFailedException: Index locked for write for core collection1 有可能是索引庫已經被一個solr占用了,不能兩個端口同時啟動同一個core。

  如果沒有報錯啟動成功后就可以在瀏覽器中輸入地址: http://localhost:8983/solr/ 就可以看到solr的服務主頁了。

 

三、Tomcat上安裝Solr

  假設是Linux服務器。

  1.打開tomcat目錄下的conf/server.xml,設置tomcat編碼,防止從solr中查詢時,參數為中文因亂碼而查不出結果;

[root@note ~]# vi /opt/tomcat/conf/server.xml

  在8080端口對應的Connector中加入URIEncoding="UTF-8",如下圖(一定注意大小寫):

  2.在tomcat中部署solr服務器

  這和在Tomcat中部署其他項目一樣。 最簡單的方法是直接將solr.war考到tomcat下,同時更名為solr.war

[root@note ~]# cp solr-4.7.2/dist/solr.war /opt/tomcat/webapps/solr.war 

  如果對Tomcat比較熟悉,也可以將solr.war解壓到任意目錄,然后通過Tomcat Context配置的方式進行部署。

  簡單介紹一下,通過Context配置有兩種常用方式。 一種是在tomcat/conf/server.xml,在<host></host>之間加入代碼:

<Context path="solr" docBase="tomcatApp/MySolrApp" debug="0" reloadable="true" crossContext="true"/> 

(path是應用的上下文跟,docBase是應用所在目錄)
另一種是在tomcat/conf/Catalina/localhost目錄增加一個XML文件,比如是MyProject,內容為:

<?xml version='1.0' encoding='utf-8'?>
 <Context crossContext="true" docBase="tomcatApp/MyProject" path="" reloadable="true">
</Context> 

(XML的文件名就是應用的上下文跟)

  3.整合索引庫

  solr應用有兩個solr文件,一個是example/webapps/solr.war,這個文件是Solr的應用服務。(可以理解成就是一個JAVA-WEB應用),另外一個是solr-4.7.2/example/solr,這個是solr-core 目錄(索引庫目錄),這個目錄用來放置索引庫。

   每個索引庫都包含一個config目錄,這個目錄是索庫的配置。

  Solr服務默認會到JAVA運行上下文目錄(tomcat/bin)中查找這個索引倉庫目錄。

  我們可以將solr-4.7.2\example下的solr拷貝至tomcat的bin目錄下(tomcat/bin/solr)。這樣當Solr服務啟動的時候就會自動加載相關的配置。 但是這種方法並不推薦,因為solr建立的索引文件也會放到索引庫中(索引庫data目錄)索引庫中會包含了索引文件,索引文件占用的空間會越來越多,所以建議將solr索引庫單獨存放。

  這個目錄可以通過該Solr服務的web.xml進行配置,打開web.xml

[root@note ~]# vi /opt/tomcat/webapps/solr/WEB-INF/web.xml 

  可以看到其中有這樣一段配置

<!--   
 <env-entry>
  <env-entry-name>solr/home</env-entry-name>
  <env-entry-value>/put/your/solr/home/here</env-entry-value>
  <env-entry-type>java.lang.String</env-entry-type>
 </env-entry>
-->

  將env-entry節點的注釋去掉,修改env-entry-value值

<env-entry>
 <env-entry-name>solr/home</env-entry-name>
 <env-entry-value>/opt/my_solr_core</env-entry-value>
 <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

  /opt/my_solr_core是solr-core的目錄 (記得將solr-core文件家的內容拷貝到my_solr_core)

  4.為Solr服務添加必要的jar包

   solr的war包中不包含任何日志的jar包,所以需要自己手動添加; 打開solr.war\WEB-INF\lib目錄,添加以下jar包

  jcl-over-slf4j-1.6.6.jar
  jul-to-slf4j-1.6.6.jar 
  log4j-1.2.16.jar
  slf4j-api-1.6.6.jar 
  lf4j-log4j12-1.6.6.jar 

  (這些是日志包,在solr-4.10.1\example\lib\ext目錄下)

[root@note ~]# cp  solr-4.7.2/example/lib/ext/* /opt/tomcat/webapps/solr/WEB-INF/lib/

  log4j需要一個log4j.properties配置文件,在solr-4.7.2/example/resources/目錄有一個演示用的log4j.properties配置文件中。
  我們可以將這個配置文件拷貝到應用中,后續再根據需要修改; 

[root@note ~]# mkdir /opt/tomcat/webapps/solr/WEB-INF/classes/
[root@note ~]# cp solr-4.7.2/example/resources/log4j.properties /opt/tomcat/webapps/solr/WEB-INF/classes/

  需要注意的是log4j.properties配置文件有一段配置:

log4j.appender.file.File=${solr.log}/solr.log 

  solr.log為tomcat啟動時指定的變量,如果沒指定,日志文件可能會寫到其他目錄下。建議改成絕對路徑,這樣更方便一些。

  如果不想輸出文件日志,那么可以將 log4j.rootLogger=INFO, file, CONSOLE 改為 log4j.rootLogger=INFO, CONSOLE

  (對於log4j相關的配置,可以查閱log4j相關文檔,這里不做具體的介紹)

  如果需要DIH服務,還需要添加DIH相關的包和jdbc相關包。
  solr-dataimporthandler-4.10.1.jar 
  solr-dataimporthandler-extras-4.10.1.jar  
  (這兩個包在 solr-4.10.1\dist目錄)  
  mysql-connector-java-5.1.22.jar    
   (mysql數據庫的驅動包,如果是其他數據庫,需要添加對應的jdbc 包)

  重啟tomcat,訪問地址http://你的服務器ip或域名/solr/ 如果可以看到如下界面,證明配置成功了!

注:部署之后需要確認索引庫中的路徑路徑配置屬否正確。 solr-4.7.2/example/solr/collection1/conf/solrconfig.xml

  這些路徑需要修改,否則可能報找不到某些類的異常,如: Can’t find (or read) directory to add to classloader 或者 java.lang.ClassNotFoundException: solr.clustering.ClusteringComponent

  這個路徑如果是相對路徑,那么是相對於索引庫的路徑 (collection1的路徑)

  

四、Solr web服務器管理界面說明

Solr web應用自帶了管理界面,可以方便的查看系統狀態,solr設置,分詞檢驗,索引查詢,增減核心(core)。

這里列舉一些常用的比較重要的內容。  

Dashboard(儀表盤) 訪問主頁,http://你的域名或ip/solr/,默認顯示此頁內容,包含solr版本,包含系統內存和jvm內存的使用情況,jvm參數等

Logging(日志) 可以用來查看solr運行是否有警告或者異常,以便及時處理  

Core Admin(索引庫管理) 這個界面很重要,這使多核的配置,索引庫的優化等,變得非常簡單; 主要功能包括:Add Core(添加核心,即索引庫),Unload(卸載核心),Rename(重命名核心),Optimize(優化索引庫)。  

Java Properties(java屬性) java及tomcat的一些屬性

  Core Selector(核心選擇器,這里以collection1為例)

1.Overview(概覽):包含基本統計如當前文檔數;和實例信息如當前核心的配置目錄;

2. Analysis(分析):檢驗分詞效果,如圖,分詞后“開發”將被高亮(注意FieldType需要選定為與被分析內容類型一致,如這里的title配置了中文分詞)

3.Config(配置):當前核心的配置,即solrconfig.xml的內容

4.Query(查詢):這是一個查詢界面,用的比較多,用來查詢索引的文檔,包含是否存在,排序是否正確等。 5.Schema(當前索引庫定義),即即schema.xml的內容  

五、安全問題

  Solr管理后台功能十分強大,但是並沒有集成安全認證機制,如果在生產環境,管理后台地址可以公開訪問的話,不但core的結構會暴漏出來,索引庫甚至可以被修改或刪除。 因為此界面涉及到位solr增減核心等管理操作,在實際產品上運行時,盡量設置禁用在公網上(通過ip或者域名)的訪問,需要使用時再臨時打開。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM