solr初步學(xué)習(xí)

前段時(shí)間自己簡(jiǎn)單的學(xué)習(xí)了一下Elasticsearch,但是我們目前開(kāi)發(fā)項(xiàng)目中其實(shí)使用的還是solr,自己之前雖然也接觸過(guò)solr,但是并沒(méi)有系統(tǒng)的學(xué)習(xí)過(guò),所以這次準(zhǔn)備系統(tǒng)的學(xué)習(xí)一下。另外我看到網(wǎng)上很多solr服務(wù)都是和tomcat整合使用的,這點(diǎn)我確實(shí)不太理解(solr是個(gè)web項(xiàng)目沒(méi)錯(cuò),但是沒(méi)感覺(jué)到它需要基于tomcat來(lái)使用),這次自己也是單獨(dú)使用solr的,沒(méi)有和tomcat做整合。

一、安裝

首先下載solr,下載地址,然后選擇相應(yīng)的目錄,我本地安裝位置:

/home/ypcfly/ypcfly/software/solr/solr-7.5.0

// 常用命令
./solr start   
./solr restart
./sorl stop

解壓以后直接進(jìn)入到安裝路徑下的bin目錄,執(zhí)行啟動(dòng)命令啟動(dòng)solr服務(wù),啟動(dòng)成功后,打開(kāi)瀏覽器訪問(wèn):
localhost:8983/solr

圖-1.png

表示服務(wù)器已經(jīng)成功啟動(dòng)了,接下來(lái)我們需要?jiǎng)?chuàng)建一個(gè)core,一個(gè)solr服務(wù)是可以有多個(gè)core的,創(chuàng)建core可以直接通過(guò)命令創(chuàng)建

./solr create –c "core name"

也可以通過(guò)后臺(tái)管理頁(yè)面手動(dòng)創(chuàng)建。先進(jìn)入到 /home/ypcfly/ypcfly/software/solr/solr-7.5.0/server/solr目錄下,創(chuàng)建一個(gè)文件夾"custom_core",并復(fù)制同目錄下的configsets文件夾下的"conf"文件夾到"custom_core",然后進(jìn)入solr的后臺(tái)管理頁(yè)面,如下圖:


圖-2.png

如果創(chuàng)建過(guò)程中出錯(cuò),按照錯(cuò)誤信息提示修改就可以了,這個(gè)過(guò)程還是很簡(jiǎn)單的。最后在"core selector"下可以選擇自己的core,并進(jìn)行其他的操作,到這里solr的安裝以及core的創(chuàng)建就完成了。

二、數(shù)據(jù)導(dǎo)入

core創(chuàng)建好了之后,solr還沒(méi)有數(shù)據(jù),所以需要從數(shù)據(jù)庫(kù)批量添加數(shù)據(jù)到solr服務(wù)器。數(shù)據(jù)導(dǎo)入可以通過(guò)solr后臺(tái)管理頁(yè)面導(dǎo)入,也可以通過(guò)代碼操作solr客戶(hù)端導(dǎo)入,這里就簡(jiǎn)單的通過(guò)后臺(tái)管理頁(yè)面導(dǎo)入數(shù)據(jù)。先選擇需要導(dǎo)入數(shù)據(jù)的core,然后選擇Dataimport,如下圖:


圖-3.png

但是,在導(dǎo)入之前我們還有兩個(gè)很重要的事情需要處理:一是配置導(dǎo)入數(shù)據(jù)需要的處理器;二是配置數(shù)據(jù)源。

1、配置導(dǎo)入數(shù)據(jù)處理器

打開(kāi) /home/ypcfly/ypcfly/software/solr/solr-7.5.0/server/solr/cutom_core/conf/solrconfig.xml文件,添加導(dǎo)入數(shù)據(jù)處理器,這個(gè)和其他的處理器放在一起就可以了。

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  <lst name="defaults">
    //配置文件的路徑應(yīng)該也可以使用絕對(duì)路徑
    <str name="config">dataConfig.xml</str>
  </lst>
</requestHandler>
2、配置數(shù)據(jù)源

然后在conf文件夾下新建一個(gè)dataConfig.xml文件(名字自己隨意取,只需要和上面solrconfig配置中的名稱(chēng)一致即可),并配置數(shù)據(jù)源和相關(guān)的document,也就是需要導(dǎo)入的數(shù)據(jù)。solr的數(shù)據(jù)源是支持多個(gè)數(shù)據(jù)庫(kù)的,比方我可以使用mysql的user表,同時(shí)使用postgresql的order表,只是相對(duì)復(fù)雜一點(diǎn),多庫(kù)的情況個(gè)人感覺(jué)應(yīng)該很少見(jiàn)。具體可以見(jiàn)solr官方文檔,我依然使用的是postgresql數(shù)據(jù)庫(kù),其他數(shù)據(jù)庫(kù)一樣的格式。這里我document配置了最簡(jiǎn)單的單表查詢(xún)。entity就是我們的"實(shí)體",column就是表的列名,name是對(duì)應(yīng)的solr的Field。

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
  <dataSource
        driver="org.postgresql.Driver"
        url="jdbc:postgresql://localhost:5432/springboot"
        user="postgres" password="123456"/>
  <document>
      <entity name="user" query="select * from t_user">
        <field column="id" name="id"/>
        <field column="username" name="userName"/>
        <field column="age" name="userAge"/>
        <field column="sex" name="sex"/>
        <field column="address" name="address"/>
        <field column="mobile" name="mobile"/>
        <field column="description" name="description"/>
      </entity>
  </document>
</dataConfig>

數(shù)據(jù)源的配置文件配置好以后,需要將數(shù)據(jù)庫(kù)查詢(xún)的column的名字和solr中Field的名字對(duì)應(yīng)起來(lái),所以還需要在schema配置文件添加相關(guān)的Field,打開(kāi)conf下面的managed-schema文件,添加相應(yīng)的Field。

    <!-- 自定義添加filed -->
    <field name="userName" type="string" indexed="true" stored="true"/>
    <field name="userAge" type="pint" indexed="true" stored="true"/>
    <field name="sex" type="string" indexed="true" stored="true"/>
    <field name="mobile" type="string" indexed="true" stored="true"/>
    <field name="address" type="string" indexed="true" stored="true"/>
    <field name="description" type="string" indexed="true" stored="true"/>

自定義Field的類(lèi)型必須是solr已有的類(lèi)型,indexed表示改字段是否支持索引,stored表示是否會(huì)存儲(chǔ)。至于為什么我沒(méi)添加id,那是因?yàn)閟olr已經(jīng)有了id字段,所以不需要用戶(hù)再去定義了。
最后一個(gè)是導(dǎo)入相關(guān)的jar包,因?yàn)閿?shù)據(jù)導(dǎo)入我們使用到了數(shù)據(jù)庫(kù),所以必須要有數(shù)據(jù)庫(kù)驅(qū)動(dòng)的jar,另一個(gè)就是solr自帶的data-import的jar。數(shù)據(jù)庫(kù)驅(qū)動(dòng)根據(jù)自己數(shù)據(jù)庫(kù)選擇,而solr自帶的兩個(gè)相關(guān)jar包,可以在solr解壓目錄"dist"目錄下找到,而我本地路徑:

/home/ypcfly/ypcfly/software/solr/solr-7.5.0/dist

一個(gè)是solr-dataimporthandler-7.5.0.jar,另一個(gè)是solr-dataimporthandler-extras-7.5.0.jar。將這三個(gè)jar包復(fù)制到"../server/solr-webapp/webapp/WEB-INF/lib"文件夾下。
然后重新啟動(dòng)solr服務(wù)器。

3、數(shù)據(jù)導(dǎo)入

啟動(dòng)好solr服務(wù)器后,打開(kāi)solr后臺(tái)管理頁(yè)面,選擇"Dataimport",勾選上"圖-3"中的"Clean"和"Commit",然后點(diǎn)擊"Excute"執(zhí)行成功后,在點(diǎn)擊旁邊的"Refresh status",如果報(bào)錯(cuò)的話(huà)根據(jù)報(bào)錯(cuò)信息進(jìn)行排除即可。然后我們查詢(xún)一下數(shù)據(jù)是不是真的導(dǎo)入成功,選擇查詢(xún)所有數(shù)據(jù),看結(jié)果是否一致就可以了。


圖-4.png

結(jié)果總共有4條記錄和我數(shù)據(jù)的數(shù)據(jù)完全一致,說(shuō)明數(shù)據(jù)導(dǎo)入成功了。

三、安裝IK分詞器

其實(shí)solr也好elasticsearch一般都會(huì)配置單獨(dú)的中文分詞器,根據(jù)需要可能會(huì)選IK或者pingyin,也可能都安裝,下面簡(jiǎn)單記錄下安裝IK中文分詞的過(guò)程。solr也是有自帶分詞器的,但是對(duì)中文支持并不好,所以都會(huì)需要安裝專(zhuān)門(mén)的中文分詞器。

1、配置IK

先根據(jù)自己solr版本下載相應(yīng)的IK分詞器包,下載地址。感覺(jué)solr版本的IK下載地址不太好找,不像Elasticsearch非常容易找到每個(gè)版本對(duì)應(yīng)的IK。下載的時(shí)候選擇jar格式,下載之后將jar包復(fù)制到"../server/solr-webapp/webapp/WEB-INF/lib"文件夾下,我的本地路徑是:

/home/ypcfly/ypcfly/software/solr/solr-7.5.0/server/solr-webapp/webapp/WEB-INF/lib
然后在WEB-INF文件夾下新建一個(gè)"classes"文件,復(fù)制IK分詞器需要的相關(guān)配置文件(我是從jar包解壓獲取的)到classes目錄下,其實(shí)主要就一個(gè),那就是"IKAnalyzer.cfg.xml",也就是IK的配置文件,內(nèi)容也不多,如果找不到直接復(fù)制就行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
    <comment>IK Analyzer 擴(kuò)展配置</comment>
    <!--用戶(hù)可以在這里配置自己的擴(kuò)展字典 -->
    <entry key="ext_dict">custom.dic;</entry> 
    
    <!--用戶(hù)可以在這里配置自己的擴(kuò)展停止詞字典-->
    <entry key="ext_stopwords">stopword.dic;</entry> 
    
</properties>

在上面的配置文件中我已經(jīng)自定義了我的用戶(hù)詞典,當(dāng)然還沒(méi)用配置相關(guān)的詞。用戶(hù)詞典應(yīng)該也可以配置遠(yuǎn)程字典的,但是這里不知道為什么沒(méi)有。

2、配置schema

這里我們需要打開(kāi)"core"/conf目錄下的"managed-schema"文件,然后添加上IK的分詞器的配置內(nèi)容:

<fieldType name="ik_word" class="solr.TextField">
  <analyzer type="index">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

名字自己隨意就好了,到這里關(guān)于IK分詞器的整個(gè)配置就完成了,接下來(lái)使用IK分詞器測(cè)試一下

3、測(cè)試

配置IK完成后啟動(dòng)solr服務(wù)器,選擇自定義的core,選擇"Analysis",隨意輸入一段中文,然后選擇到"ik_word"(和上面managed-schema配置中自己定義名稱(chēng)一致),點(diǎn)擊右側(cè)"Analyse Values",結(jié)果如下:


圖-5.png

這個(gè)時(shí)候我自定義的用戶(hù)字典還每沒(méi)添加任何的詞語(yǔ),但是根據(jù)結(jié)果也看出來(lái),其實(shí)IK已經(jīng)幫我們做了一些分詞了,只是效果比較差,更多的還是一個(gè)一個(gè)的漢字,下面是分詞結(jié)果:

嵎   山金  金碧  有   光輝  遷   停車(chē)  車(chē)馬  正   輕   肥   彌   思   王   褒   擁   節(jié)   去   復(fù)   憶   相   如   乘   傳   歸   君   平   子   云   寂   不   嗣   江漢  漢英  英靈  已   信   稀

這是IK默認(rèn)的分詞效果,現(xiàn)在我們使用我們自己的那字典,然后再測(cè)試一下。先進(jìn)入相關(guān)的文件夾,即

/home/ypcfly/ypcfly/software/solr/solr-7.5.0/server/solr-webapp/webapp/WEB-INF/classes

打開(kāi)自定義的字典文件custom.dic,并添加幾個(gè)詞語(yǔ),我添加的詞語(yǔ)如下:

嵎山    正輕肥     彌思王褒    復(fù)憶    乘傳歸    君平子云      已信稀

也就是說(shuō)這些詞會(huì)被solr單獨(dú)分出來(lái)作為一個(gè)不可分的最小單元,完成后重新啟動(dòng)solr再測(cè)試一次,結(jié)果如下:


圖-6.png

相比第一次沒(méi)添加的時(shí)候已經(jīng)好些了,整個(gè)分詞結(jié)果如下:

嵎山  山金  金碧  有   光輝  遷   停車(chē)  車(chē)馬  正輕肥 彌思王褒    擁   節(jié)   去   復(fù)憶  相   如   乘傳歸 君平子云    寂   不   嗣   江漢  漢英  英靈  已信稀

通過(guò)兩次分詞結(jié)果對(duì)比很直觀的就發(fā)現(xiàn),自定義字典里的詞都已經(jīng)分出來(lái)了,但是感覺(jué)效果還是不太好,我記得IK應(yīng)該是可以指定最大分詞和最小分詞的,但是和solr的整合中自己還沒(méi)有發(fā)現(xiàn)這個(gè)功能。
好了,這次關(guān)于solr的入門(mén)學(xué)習(xí)先到這里,關(guān)于solr的一些基本操作下次再繼續(xù)學(xué)習(xí)吧,到時(shí)候可以通過(guò)一個(gè)簡(jiǎn)單的demo,學(xué)習(xí)一下如何在代碼中使用solr。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一.簡(jiǎn)介 Solr是一個(gè)獨(dú)立的企業(yè)級(jí)搜索應(yīng)用服務(wù)器,它對(duì)外提供類(lèi)似于Web-service的API接口。用戶(hù)可以通...
    泰安青年閱讀 3,910評(píng)論 0 37
  • Solr的安裝與配置 多數(shù)搜索引擎應(yīng)用都必須具有某種搜索功能,而搜索功能往往大量的消耗資源導(dǎo)致應(yīng)用程序運(yùn)行緩慢。為...
    TyCoding閱讀 5,482評(píng)論 1 5
  • 1. 什么是solr ?? Solr 是Apache下的一個(gè)頂級(jí)開(kāi)源項(xiàng)目,采用Java開(kāi)發(fā),它是基于Lucene的...
    東方舵手閱讀 996評(píng)論 1 5
  • 兩年前用過(guò)solr5.1版本的,當(dāng)時(shí)只是簡(jiǎn)單入個(gè)門(mén),拿來(lái)在項(xiàng)目里建個(gè)全文索引,然后再query,其他什么也沒(méi)做,還...
    Coselding閱讀 3,250評(píng)論 3 22
  • 那是溫馨。 早晨的陽(yáng)光,從窗口打在臉上,眼睛朦朧未開(kāi),老媽早已拿著拖鞋在床頭站著,”你們先吃嘛!“,我懶散的說(shuō),睡...
    Themores閱讀 273評(píng)論 1 3

友情鏈接更多精彩內(nèi)容