首先介紹一下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)
這塊的真正原因在於安裝腳本的時候默認的路徑 其實這裏可以修改 如下圖所示:
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服務
啓動步驟:
(1)切換到/home/solr/solr-5.3.1/
(2)執行: # ./bin/solr restart 等待幾秒中會自動重啓成功
(3)接下來就會創建好相關的core或者集合 如下圖所示:
二、接下來看看core裏面的組成部分 進入companys core目錄下面
裏面有conf、data2個目錄和core.properties
接着進入conf目錄下面裏面有下圖幾個配置文件和相關其他文件
其中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 最新版貌似改了 然後在裏面添加數據庫相關字段
接下來介紹字段相關知識:
性能須知: 這裏包含了很多實際應用不需要的可選項。 爲改善性能,你可以:
- 儘量將所有僅用於搜索,而不用於實際返回的字段設置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的管理平臺頁面
下圖就是在添加一個core或者集合 首先得完成上面的那些配置 主要是先通過命令去生成一個core然後配置好或者不配置然後在這裏添加,通過錯誤提示然後進行配置或者文件相關創建或者修改等等
下圖展示一個core裏面的查詢相關的數據:
數據導入有兩種實現方式
(1)通過solr自帶的導入方式 有全量導入和增量導入 首先得配置好上面第二部分和第三部分紅色的
選擇好相關選項後點擊 execute按鈕 就會在右側顯示相關實時動態
最後補充幾個容易忽視的問題也會對使用造成干擾
1、
改完重啓solr以後 再次打開solr的管理平臺 就會自動出現已經創建好的core 如圖:
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報以下錯誤後
只需要把當前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
至此 安裝和測試數據整合已經完畢 特此備註下已備忘 歡迎各位拍磚。。。。。
下一篇會講solr的一些用法solr5使用方法篇以及高級功能facet使用