首先介紹一下solr
Solr現(xiàn)在是一個獨(dú)立的服務(wù)器。
從Solr5.0開始,Solr不再發(fā)布為在任何Servlet容器(tomcat等 自帶一個jetty服務(wù)器)中部署的“war”Web應(yīng)用程序包(Web Application Archive)。Solr現(xiàn)在部署為一個獨(dú)立的java服務(wù)器應(yīng)用程序方篮,包含在Unix谜慌、linux和Windows平臺上可以使用的啟動和停止腳本辙喂,以及將Solr作為服務(wù)安裝到類Unix平臺的/etc/init.d下的安裝腳本据沈。
從本質(zhì)上看啃炸,Solr仍然以Servlet APIs實(shí)現(xiàn),并在Jetty上運(yùn)行卓舵,但只是作為一個實(shí)現(xiàn)南用。部署為“webapp”到其他的Servlet容器(或其他Jetty實(shí)例)上不被支持,可能在未來的Solr 5.x版本不會工作掏湾。而可能會帶來Solr的其他改變裹虫,事實(shí)上是利用自定義網(wǎng)絡(luò)協(xié)議棧功能
一、安裝JAVA環(huán)境以及JRE
# cd /tmp/
# tar zxvf ?jdk-7u9-linux-x64.tar.gz
# mv ?jdk1.7.0_09 /usr/
# vi ?/etc/profile
在最后一行復(fù)制以下代碼添加如下內(nèi)容:
JAVA_HOME=/usr/jdk1.7.0_09/
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
保存退出(:wq!)后融击,執(zhí)行下面命令生效:
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目錄下尊浪,執(zhí)行如下腳本:
創(chuàng)建應(yīng)用程序目錄
# mkdir -p /home/solr
# cd /home/solr
# tar -zxvf solr-5.3.1.tgz // 解壓壓縮包
創(chuàng)建運(yùn)行solr的用戶并賦權(quán)
# groupadd solr
# useradd -g solr solr
# chown -R solr.solr /home/solr ?將home/solr下面的所有目錄修改成solr用戶權(quán)限
三匣屡、安裝solr服務(wù)
# solr-5.3.1/bin/install_solr_service.sh solr-5.3.1.tgz -d /home/solr/data -i /home/solr
至此已經(jīng)安裝好solr5.3.1然后檢查服務(wù)狀態(tài)
#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"
}
說明已經(jīng)正常啟動
四、查看solr命令選項(xiàng)
solr命令用法
定位到solr應(yīng)用程序目錄
# cd /home/solr/solr-5.3.1/solr
# ./bin/solr restart|start|stop 重啟|啟動|關(guān)閉 服務(wù)
接下來就是添加core或者集合的時候了
一拇涤、首先創(chuàng)建一個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用戶后進(jìn)行創(chuàng)建core核心
如果以上命令把core創(chuàng)建到/home/solr/data/下面的話 是有問題的 solr默認(rèn)加載的core目錄是在
/home/solr/solr-5.3.1/server/solr/下面捣作,然后可以復(fù)制/home/solr/data/下面core或者集合到/home/solr/solr-5.3.1/server/solr/目錄下面(糾正:其實(shí)這段是有問題的后來查看資料發(fā)現(xiàn)solr默認(rèn)的數(shù)據(jù)文件是在根目錄下面即/home/solr/data)
這塊的真正原因在于安裝腳本的時候默認(rèn)的路徑 其實(shí)這里可以修改 如下圖所示:
SOLR_PID_DIR=/home/solr
SOLR_HOME=/home/solr/data 主要是這塊的配置 如果是在server下面的solr就會將core和索引數(shù)據(jù)創(chuàng)建到server下面 如果是根目錄data那么索引就會在data下面
LOG4J_PROPS=/home/solr/log4j.properties
SOLR_LOGS_DIR=/home/solr/logs
SOLR_PORT=8983
然后重啟solr服務(wù)
啟動步驟:
(1)切換到/home/solr/solr-5.3.1/
(2)執(zhí)行: # ./bin/solr restart 等待幾秒中會自動重啟成功
(3)接下來就會創(chuàng)建好相關(guān)的core或者集合 如下圖所示:
二、接下來看看core里面的組成部分 進(jìn)入companys core目錄下面
里面有conf鹅士、data2個目錄和core.properties
接著進(jìn)入conf目錄下面里面有下圖幾個配置文件和相關(guān)其他文件
其中solrconfig.xml是solr的相關(guān)配置文件
managed_schema主要定義索引的字段和字段類型還有一些分詞等等設(shè)置 (類似于數(shù)據(jù)表配置文件貌似是solr5以后的文件名)
data-config.xml是將mysql數(shù)據(jù)導(dǎo)入到solr的相關(guān)配置 首先得在solrconfig.xml中配置開啟一個xml選項(xiàng)后
data-config.xml
然后在data-config.xml里面設(shè)置以下
注:上面的database_name是你創(chuàng)建的數(shù)據(jù)庫名券躁,userName是數(shù)據(jù)庫用戶名,passWord是數(shù)據(jù)庫密碼掉盅,tableName是你的表名也拜,field區(qū)域當(dāng)中的column對應(yīng)數(shù)據(jù)庫中的列,而name就是solr中顯示的名稱趾痘。
(1)在配置完以上設(shè)置項(xiàng)后還需要將solr-dataimporthandler-5.3.1.jar從solr-5.3.1/dist/文件夾下copy到solr-5.3.1/server/solr-webapp/webapp/WEB-INF/lib當(dāng)中慢哈,此jar包是導(dǎo)入數(shù)據(jù)用的。
(2)再從mysql官網(wǎng)中下載一個mysql-connector-java-5.1.35.zip壓縮包永票,解壓出一個mysql-connector-java-5.1.35-bin.jar包卵贱,將它c(diǎn)opy到solr-5.3.1/server/lib下。
然后在solr的管理平臺才能通過在瀏覽器中輸入:localhost:8983/solr/dataimport?command=full-import或者圖形操作來完成全量數(shù)據(jù)導(dǎo)入瓦侮,在每次全量數(shù)據(jù)導(dǎo)入執(zhí)行的時候艰赞,原有索引會被刪除佣谐,如果不想刪除原有索引肚吏,可以運(yùn)行如下命令:localhost:8983/solr/dataimport?command=full-import&clean=false
三、接下來講解shema的設(shè)置
vim managed-schema 之前版本名稱叫shema.xml 最新版貌似改了 然后在里面添加數(shù)據(jù)庫相關(guān)字段
接下來介紹字段相關(guān)知識:
性能須知: 這里包含了很多實(shí)際應(yīng)用不需要的可選項(xiàng)狭魂。 為改善性能罚攀,你可以:
- 盡量將所有僅用于搜索党觅,而不用于實(shí)際返回的字段設(shè)置stored="false";
- 盡量將所有僅用于返回斋泄,而不用于搜索的字段設(shè)置indexed="false"杯瞻;
- 去掉所有不需要的copyField 語句;
- 為了達(dá)到最佳的索引大小和搜索性能,對所有的文本字段設(shè)置indexed="false"炫掐,
使用copyField將他們拷貝到“整合字段”name="text"的字段中魁莉,使用整合字段進(jìn)行搜索;
- 使用server模式來運(yùn)行JVM,同時將log級別調(diào)高, 避免輸出所有請求的日志募胃。
-->
旗唁。。痹束。检疫。。
-->
name: 必須屬性 - 字段名
type: 必須屬性 - 中定義的字段類型
indexed: 如果字段需要被索引(用于搜索或排序)祷嘶,屬性值設(shè)置為true
stored: 如果字段內(nèi)容需要被返回屎媳,值設(shè)置為true
docValues: 如果這個字段應(yīng)該有文檔值(doc values),設(shè)置為true论巍。文檔值在門面搜索烛谊,分組,排序和函數(shù)查詢中會非常有用嘉汰。雖然不是必須的晒来,而且會導(dǎo)致 ? ? ? ? ? ? ? ? 生成索引變大變慢,但這樣設(shè)置會使索引加載更快郑现,更加NRT友好湃崩,更高的內(nèi)存使用效率。然而也有一些使用限制:目前僅支持StrField, UUIDFiel ? ? ? ? ? ? ? ?d和所有 Trie*Fields, 并且依賴字段類型, 可能要求字段為單值(single-valued)的,必須的或者有默認(rèn)值接箫。
multiValued: 如果這個字段在每個文檔中可能包含多個值攒读,設(shè)置為true
termVectors: [false] 設(shè)置為true后,會保存所給字段的相關(guān)向量(vector)
當(dāng)使用MoreLikeThis時, 用于相似度判斷的字段需要設(shè)置為stored來達(dá)到最佳性能.
termPositions: 保存和向量相關(guān)的位置信息辛友,會增加存儲開銷
termOffsets: 保存 offset 和向量相關(guān)的信息薄扁,會增加存儲開銷
required: 字段必須有值,否則會拋異常
default: 在增加文檔時废累,可以根據(jù)需要為字段設(shè)置一個默認(rèn)值邓梅,防止為空
sortMissingLast: ? ?指沒有該指定字段數(shù)據(jù)的document排在有該指定字段數(shù)據(jù)的document的后面
sortMissingFirst: ? ?指沒有該指定字段數(shù)據(jù)的document排在有該指定字段數(shù)據(jù)的document的前面
omitNorms: ? ?字段的長度不影響得分和在索引時不做boost時,設(shè)置它為true邑滨。一般文本字段不設(shè)置為true日缨。
compressed: ? ?字段是壓縮的。這可能導(dǎo)致索引和搜索變慢掖看,但會減少存儲空間匣距,只有StrField和TextField是可以壓縮面哥,這通常適合字段的長度超過200個字符。
positionIncrementGap: 和multiValued一起使用毅待,設(shè)置多個值之間的虛擬空白的數(shù)量
-->
id
文檔的唯一標(biāo)識尚卫, 必須填寫這個field(除非該field被標(biāo)記required="false"),否則solr建立索引報(bào)錯尸红。
name
如果搜索參數(shù)中沒有指定具體的field吱涉,那么這是默認(rèn)的域。
配置搜索參數(shù)短語間的邏輯外里,可以是"AND|OR"邑飒。
中文分詞后續(xù)在介紹。级乐。疙咸。。风科。撒轮。。
四贼穆、至此所有配置都已經(jīng)完成题山,接下來重啟solr 進(jìn)入到/home/solr/solr-5.3.1/solr 然后執(zhí)行
# ./bin/solr restart
等待啟動以后然后通過
http://localhost:8983/solr/#/進(jìn)入到solr的管理平臺頁面
下圖就是在添加一個core或者集合 首先得完成上面的那些配置 主要是先通過命令去生成一個core然后配置好或者不配置然后在這里添加,通過錯誤提示然后進(jìn)行配置或者文件相關(guān)創(chuàng)建或者修改等等
下圖展示一個core里面的查詢相關(guān)的數(shù)據(jù):
數(shù)據(jù)導(dǎo)入有兩種實(shí)現(xiàn)方式
(1)通過solr自帶的導(dǎo)入方式 有全量導(dǎo)入和增量導(dǎo)入 首先得配置好上面第二部分和第三部分紅色的
選擇好相關(guān)選項(xiàng)后點(diǎn)擊 execute按鈕 就會在右側(cè)顯示相關(guān)實(shí)時動態(tài)
最后補(bǔ)充幾個容易忽視的問題也會對使用造成干擾
1故痊、
改完重啟solr以后 再次打開solr的管理平臺 就會自動出現(xiàn)已經(jīng)創(chuàng)建好的core 如圖:
2顶瞳、配置好的solr沒有任何數(shù)據(jù),啟動時報(bào)錯:SolrException: Invalid Number: MA147LL/A
這不是你的錯愕秫,你可能是把solr schema.xml的id設(shè)置成了int類型慨菱,設(shè)置成int類型沒什么錯,但是solr啟動是會掃描conf目錄下的elevate.xml文件戴甩,這個文件中定義的id值是MA147LL/A所以就會出現(xiàn)異常SolrException: Invalid Number: MA147LL/A
解決問題的方法是修改elevate.xml文件符喝,將其中的id值設(shè)置為數(shù)字,就可以了甜孤。
3协饲、如果配置好后執(zhí)行更新solr數(shù)據(jù)命令后 solr報(bào)以下錯誤后
只需要把當(dāng)前core的managed-schema或者schema.xml配置文件中的自增id改成string類型 重啟solr后就不會報(bào)錯了這是因?yàn)閟olr本身索引是基于文本值的
c_id
4、solr的原子更新 就是只改某個字段問題解決:
官網(wǎng)文檔地址:http://wiki.apache.org/solr/UpdateJSON#Solr_4.0_Example
至此 安裝和測試數(shù)據(jù)整合已經(jīng)完畢?特此備注下已備忘 歡迎各位拍磚缴川。茉稠。。把夸。而线。
下一篇會講solr的一些用法solr5使用方法篇以及高級功能facet使用
本文出自 “網(wǎng)站架構(gòu)技術(shù)總結(jié)” 博客,請務(wù)必保留此出處http://mengphilip.blog.51cto.com/2243393/1719686