centos最新版solr5.3.1安裝和數據整理以及遇到的問題解答

首先介紹一下solr

  Solr現在是一個獨立的服務器。

  從Solr5.0開始,Solr不再發布爲在任何Servlet容器(tomcat等 自帶一個jetty服務器)中部署的“war”Web應用程序包(Web Application Archive)。Solr現在部署爲一個獨立的java服務器應用程序,包含在Unix、linux和Windows平臺上可以使用的啓動和停止腳本,以及將Solr作爲服務安裝到類Unix平臺的/etc/init.d下的安裝腳本。

 從本質上看,Solr仍然以Servlet APIs實現,並在Jetty上運行,但只是作爲一個實現。部署爲“webapp”到其他的Servlet容器(或其他Jetty實例)上不被支持,可能在未來的Solr 5.x版本不會工作。而可能會帶來Solr的其他改變,事實上是利用自定義網絡協議棧功能

一、安裝JAVA環境以及JRE

# cd /tmp/            

# tar zxvf  jdk-7u9-linux-x64.tar.gz

# mv  jdk1.7.0_09 /usr/

# vi  /etc/profile

在最後一行復制以下代碼添加如下內容:

JAVA_HOME=/usr/jdk1.7.0_09/

CLASSPATH=.:$JAVA_HOME/lib/tools.jar

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME CLASSPATH PATH

保存退出(:wq!)後,執行下面命令生效:

source /etc/profile


二、安裝Solr5.3.1

  去http://www.apache.org/dyn/closer.lua/lucene/solr/5.3.1下載Solr安裝文件solr-5.3.1.tgz。

將solr-5.3.1.tgz文件放到/home/solr目錄下,執行如下腳本:    

 創建應用程序目錄

 # mkdir -p /home/solr

 # cd /home/solr  

 # tar -zxvf solr-5.3.1.tgz // 解壓壓縮包

 創建運行solr的用戶並賦權

 # groupadd solr    

 # useradd -g solr solr    

 # chown -R solr.solr /home/solr  將home/solr下面的所有目錄修改成solr用戶權限


三、安裝solr服務

 # solr-5.3.1/bin/install_solr_service.sh solr-5.3.1.tgz -d /home/solr/data -i /home/solr

 至此已經安裝好solr5.3.1然後檢查服務狀態   

 # service solr status

 將會看到如下輸出:   

 Solr process 29692 running on port 8983    

 {    

   "solr_home":"/home/solr/data/",    

   "version":"5.3.1 1696229 - noble - 2015-12-4 17:10:43",    

   "startTime":"2015-12-4T01:32:03.919Z",    

   "uptime":"0 days, 0 hours, 3 minutes, 6 seconds",    

   "memory":"89.8 MB (%18.3) of 490.7 MB"

 }

 說明已經正常啓動


四、查看solr命令選項


 solr命令用法

 定位到solr應用程序目錄  

 # cd /home/solr/solr-5.3.1/solr

 # ./bin/solr restart|start|stop 重啓|啓動|關閉 服務

 接下來就是添加core或者集合的時候了 

   一、首先創建一個core 命令爲:su - solr -c "/home/solr/solr-5.3.1/bin/solr create -c companys"或者 切換到/home/solr/solr-5.3.1/ 目錄下 通過./bin/solr create -c companys 

su - solr意思是切換到solr用戶後進行創建core核心

如果以上命令把core創建到/home/solr/data/下面的話 是有問題的 solr默認加載的core目錄是在

/home/solr/solr-5.3.1/server/solr/下面,然後可以複製/home/solr/data/下面core或者集合到/home/solr/solr-5.3.1/server/solr/目錄下面 (糾正:其實這段是有問題的後來查看資料發現solr默認的數據文件是在根目錄下面即/home/solr/data)

這塊的真正原因在於安裝腳本的時候默認的路徑 其實這裏可以修改 如下圖所示:

wKioL1aKc5_QPzlFAAA0-bkfczg959.png

wKiom1aKc3zxQkHlAABamuBn08E101.png

SOLR_PID_DIR=/home/solr

SOLR_HOME=/home/solr/data 主要是這塊的配置 如果是在server下面的solr就會將core和索引數據創建到server下面 如果是根目錄data那麼索引就會在data下面 

LOG4J_PROPS=/home/solr/log4j.properties

SOLR_LOGS_DIR=/home/solr/logs

SOLR_PORT=8983

然後重啓solr服務

wKioL1ZmLkeShQM5AAB5I77TDF4200.png

  啓動步驟:

    (1)切換到/home/solr/solr-5.3.1/

    (2)執行: # ./bin/solr restart 等待幾秒中會自動重啓成功

    (3)接下來就會創建好相關的core或者集合 如下圖所示:

wKioL1Zhd5vjO8qDAABmP-VhB5Q109.png

二、接下來看看core裏面的組成部分 進入companys core目錄下面

  裏面有conf、data2個目錄和core.properties

  接着進入conf目錄下面裏面有下圖幾個配置文件和相關其他文件

wKioL1ZheD3RbnmdAABWiPKwqbA432.png

其中solrconfig.xml是solr的相關配置文件

  managed_schema 主要定義索引的字段和字段類型還有一些分詞等等設置 (類似於數據表配置文件貌似是solr5以後的文件名)

  data-config.xml是將mysql數據導入到solr的相關配置 首先得在solrconfig.xml中配置開啓一個xml選項後 

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">   

    <lst name="defaults">   

        <str name="config">data-config.xml</str>   

    </lst>   

</requestHandler>


然後在data-config.xml裏面設置以下

<dataConfig>

    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/database_name" user="userName" password="passWord"/>

    <document>

        <entity name="check_lawyer" query="select id, name from tableName">

            <field column="id" name="id" />

            <field column="name" name="name" />

        </entity>

    </document>

</dataConfig>

注:上面的database_name是你創建的數據庫名,userName是數據庫用戶名,passWord是數據庫密碼,tableName是你的表名,field區域當中的column對應數據庫中的列,而name就是solr中顯示的名稱。


(1)在配置完以上設置項後還需要將solr-dataimporthandler-5.3.1.jar從solr-5.3.1/dist/文件夾下copy到solr-5.3.1/server/solr-webapp/webapp/WEB-INF/lib當中,此jar包是導入數據用的。


(2)再從mysql官網中下載一個mysql-connector-java-5.1.35.zip壓縮包,解壓出一個mysql-connector-java-5.1.35-bin.jar包,將它copy到solr-5.3.1/server/lib下。

然後在solr的管理平臺才能通過在瀏覽器中輸入:localhost:8983/solr/dataimport?command=full-import或者圖形操作來完成全量數據導入,在每次全量數據導入執行的時候,原有索引會被刪除,如果不想刪除原有索引,可以運行如下命令:localhost:8983/solr/dataimport?command=full-import&clean=false



三、接下來講解shema的設置

   vim managed-schema 之前版本名稱叫shema.xml 最新版貌似改了 然後在裏面添加數據庫相關字段

wKiom1ZheI_z6IhNAAC7VL84RiA939.png

接下來介紹字段相關知識:

性能須知: 這裏包含了很多實際應用不需要的可選項。 爲改善性能,你可以:

  - 儘量將所有僅用於搜索,而不用於實際返回的字段設置stored="false";

  - 儘量將所有僅用於返回,而不用於搜索的字段設置indexed="false";

  - 去掉所有不需要的copyField 語句;

  - 爲了達到最佳的索引大小和搜索性能,對所有的文本字段設置indexed="false",

    使用copyField將他們拷貝到“整合字段”name="text"的字段中,使用整合字段進行搜索;

  - 使用server模式來運行JVM,同時將log級別調高, 避免輸出所有請求的日誌。

-->

<schema name="example" version="1.5">

  。。。。。

 <fields>

   <!-- fields各個屬性說明:

     name: 必須屬性 - 字段名

     type: 必須屬性 - <types>中定義的字段類型 

     indexed: 如果字段需要被索引(用於搜索或排序),屬性值設置爲true

     stored: 如果字段內容需要被返回,值設置爲true

     docValues: 如果這個字段應該有文檔值(doc values),設置爲true。文檔值在門面搜索,分組,排序和函數查詢中會非常有用。雖然不是必須的,而且會導致                 生成索引變大變慢,但這樣設置會使索引加載更快,更加NRT友好,更高的內存使用效率。然而也有一些使用限制:目前僅支持StrField, UUIDFiel                d和所有 Trie*Fields, 並且依賴字段類型, 可能要求字段爲單值(single-valued)的,必須的或者有默認值。

     multiValued: 如果這個字段在每個文檔中可能包含多個值,設置爲true

     termVectors: [false] 設置爲true後,會保存所給字段的相關向量(vector)

     當使用MoreLikeThis時, 用於相似度判斷的字段需要設置爲stored來達到最佳性能.

     termPositions: 保存和向量相關的位置信息,會增加存儲開銷 

     termOffsets: 保存 offset 和向量相關的信息,會增加存儲開銷

     required: 字段必須有值,否則會拋異常

     default: 在增加文檔時,可以根據需要爲字段設置一個默認值,防止爲空

     sortMissingLast:    指沒有該指定字段數據的document排在有該指定字段數據的document的後面  

     sortMissingFirst:    指沒有該指定字段數據的document排在有該指定字段數據的document的前面  

     omitNorms:    字段的長度不影響得分和在索引時不做boost時,設置它爲true。一般文本字段不設置爲true。    

     compressed:    字段是壓縮的。這可能導致索引和搜索變慢,但會減少存儲空間,只有StrField和TextField是可以壓縮,這通常適合字段的長度超過200個字符。  

     positionIncrementGap: 和multiValued一起使用,設置多個值之間的虛擬空白的數量 

   -->

   <!-- 保留字段,不能刪除,否則報錯 -->

   <field name="_version_" type="long" indexed="true" stored="true"/>

 </fields>

<uniqueKey> id </uniqueKey>

文檔的唯一標識, 必須填寫這個field(除非該field被標記required="false"),否則solr建立索引報錯。

<defaultSearchField> name</defaultSearchField>

如果搜索參數中沒有指定具體的field,那麼這是默認的域。

<solrQueryParser defaultOperator =" OR "/>

配置搜索參數短語間的邏輯,可以是"AND|OR"。


中文分詞後續在介紹。。。。。。。


四、至此所有配置都已經完成,接下來重啓solr 進入到/home/solr/solr-5.3.1/solr 然後執行

# ./bin/solr restart 

等待啓動以後然後通過

http://localhost:8983/solr/#/  進入到solr的管理平臺頁面

wKioL1ZhegTgCxzKAADsJvsrA5Y681.png

下圖就是在添加一個core或者集合 首先得完成上面的那些配置 主要是先通過命令去生成一個core然後配置好或者不配置然後在這裏添加,通過錯誤提示然後進行配置或者文件相關創建或者修改等等

wKioL1ZhegWxaBzmAACAgscGUY4287.png

下圖展示一個core裏面的查詢相關的數據:

wKiom1ZlBOjTKJjDAAC0AOFQtaQ638.png

數據導入有兩種實現方式

 (1)通過solr自帶的導入方式 有全量導入和增量導入 首先得配置好上面第二部分和第三部分紅色的

 然後點擊wKiom1Zhqt7x6lamAACSYG6Q3hI221.png


wKioL1ZhrLmwdaz9AACVJzOHAvI461.png

選擇好相關選項後點擊 execute按鈕 就會在右側顯示相關實時動態

最後補充幾個容易忽視的問題也會對使用造成干擾

1、

wKioL1ZlBDPTwVYVAABkvkaQbec932.png

改完重啓solr以後 再次打開solr的管理平臺 就會自動出現已經創建好的core 如圖:

wKiom1ZlBFfhrIZMAABLQfzX8uI981.png

2、配置好的solr沒有任何數據,啓動時報錯:SolrException: Invalid Number: MA147LL/A

這不是你的錯,你可能是把solr schema.xml的id設置成了int類型,設置成int類型沒什麼錯,但是solr啓動是會掃描conf目錄下的elevate.xml文件,這個文件中定義的id值是MA147LL/A所以就會出現異常SolrException: Invalid Number: MA147LL/A

解決問題的方法是修改elevate.xml文件,將其中的id值設置爲數字,就可以了。

3、如果配置好後執行更新solr數據命令後 solr報以下錯誤後

wKiom1ZmVp6hQs_vAAFEseobBRc843.png只需要把當前core的managed-schema或者schema.xml配置文件中的自增id改成string類型 重啓solr後就不會報錯了這是因爲solr本身索引是基於文本值的

<uniqueKey>c_id</uniqueKey>

<field name="c_id" type="string" indexed="true" stored="true"  multiValued="false" />

4、solr的原子更新 就是隻改某個字段問題解決:

官網文檔地址:http://wiki.apache.org/solr/UpdateJSON#Solr_4.0_Example

wKiom1Zn96jCtvsXAADrnt0SuAo075.png

wKiom1Zn9-zwRU2JAABGZsTNqDI778.png

wKiom1Zn9-3x5eTSAABaefkvCbA632.png



至此 安裝和測試數據整合已經完畢 特此備註下已備忘 歡迎各位拍磚。。。。。

下一篇會講solr的一些用法solr5使用方法篇以及高級功能facet使用  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章