三、Solr多核心及分詞器(IK)配置


多核心的概念

多核心說白了就是多索引庫。也可以理解為多個"數據庫表"

說一下使用multicore的真實場景,比若說,產品搜索和會員信息搜索,不使用多核也沒問題,這樣帶來的問題是 indexs文件很多,而且產品的索引文件和會員信息的索引文件混在一起,備份也是個問題。 如果使用了多核,那就很輕松了,產品和會員就可使用不同的URL進行提交了,業務上也很清晰,生成的索引文件也不會混在一起,也容易備份。

    每個索引庫通過相對獨立的url訪問。

 

多核心的配置

還記得solr home嗎,既然配置多核心,那么我們可以新建一個目錄作為solr home,從零開始搭建,這樣理解會更深(記得在tomcat中修改solr home路徑)。

我這里使用的solr home路徑為:D:\Installed Applications\SolrIndex,之后將solr解壓,將solr-4.9.0\example\multicore下的所有文件copy到solr home。

可以看到里面有core0和core1兩個核心,和一個solr.xml。core0和core1從名字就可以看出來是兩個示例核心,文件結構非常簡單,就只有兩個文件,schema.xml和solrconfig.xml,所以我們可以根據需要修改或新建核心,只要根據實例核心的目錄結構就好。接下來是schema.xml,這個文件相當於告訴solr,有多少核心和核心的名字及核心的位置:

結構如下:

  1. <cores adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:8983}" hostContext="${hostContext:solr}">
  2.     <core name="core0" instanceDir="core0" />
  3.     <core name="core1" instanceDir="core1" />
  4.  
  5.     <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
  6.       <str name="urlScheme">${urlScheme:}</str>
  7.     </shardHandlerFactory>
  8.   </cores>

 

 

shardHandlerFactory暫時不管,主要修改core,name是核心的名字,instanceDir是核心的路徑,默認是當前目錄,這個最好保持一致,即加入核心名字是core0,那么就在solr home下新建一個core0文件夾,里面放入配置文件,那么這就是一個核心。

我修改后的solr.xml配置如下:

  1. <cores adminPath="/admin/cores" host="${host:}" defaultCoreName="Artist" hostPort="${port:8983}" hostContext="${hostContext:solr}">
  2.     <core name="AritstCategory" instanceDir="AritstCategory" />
  3.     <core name="Artist" instanceDir="Artist" />
  4.    <core name="Song" instanceDir="Song" />
  5.    <core name="SongArtist" instanceDir="SongArtist" />
  6.    <core name="SongCategory" instanceDir="SongCategory" />
  7.    <core name="SongMenu" instanceDir="SongMenu" />
  8.    <core name="SpaceAudio" instanceDir="SpaceAudio" />
  9.    <core name="SpaceVideo" instanceDir="SpaceVideo" />
  10.    <core name="SpaceAVNum" instanceDir="SpaceAVNum" />
  11.  
  12.     <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
  13.       <str name="urlScheme">${urlScheme:}</str>
  14.     </shardHandlerFactory>
  15.   </cores>

 

目錄結構如下:

 

 

可能大家已經注意到配置有下列內容:

  1. <cores adminPath="/admin/cores" host="${host:}" defaultCoreName="Artist" hostPort="${port:8983}" hostContext="${hostContext:solr}">

 

AdminPath是指url路徑

Host是指主機名

defaultCoreName是指默認使用的核心(不配置也完全可以)

hostPort是指訪問的端口(跟tomcat的端口保持一致)

hostContext是指主機的上下文,也就是webapps中solr的項目名

其實有點像tomcat項目的配置。

 

多核心的訪問

開啟tomcat服務,訪問:localhost:8983/solr

如下圖所示:

即可看到多個核心。當然也可以在url上訪問不同核心庫:

Localhost:8983/solr/admin/coreName

剛說的defaultCoreName也就是說,如果沒指定訪問的核心,默認訪問哪個核心的作用。

 

 

分詞器簡介與配置

Solr默認是沒有中文分詞的,其中solr默認的比較常用的數據類型有下面幾種:string、long、int。詳細的請看我的另外一篇博客:一、Solr綜述

我用的是IK分詞器,是國人做的一個開源的分詞器,所以主要說下IK分詞器的配置。

下載

下載 "IK Analyzer 2012FF_hf1.zip"包。 詳見http://zhengchao730.iteye.com/blog/1833000

解壓

解壓后的目錄結構:

其中已經有比較詳細的文檔了,但是我發現文檔中並沒有對solr分詞器的配置有詳細的說明。所以請讀者繼續往下看。

 

配置

步驟一:將 IKAnalyzer2012FF_u1.jar拷貝到目錄"$TOMCAT_HOME \webapps\solr\WEB-INF\lib"中

步驟二:IKAnalyzer.cfg.xml、stopword.dic拷貝到目錄$TOMCAT_HOME \webapps\solr\WEB-INF\classes目錄下,沒有則新建classes目錄。

步驟三:每個核心中的schema.xml中配置IK分詞器:

  1. <fieldType name="text_ik" class="solr.TextField">
  2.         <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
  3.         <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
  4.    </fieldType>

 

 

這樣就可以使用ik分詞器了。

其中isMaxWordLength是指分詞的細粒度,可以分別制定index索引和query查詢的分詞細粒度,建議將index的isMaxWordLength設置為false,這樣就采用最細分詞,是索引更精確,查詢時盡量能匹配,而將query的isMaxWordLength設置為true,采用最大分詞,這樣能夠使查詢出來的結果更符合用戶的需求。

並且還有一點需要特別注意,我用的是solr4.9,所以需要把各核心schema.xml中的<schema name="example core zero" version="1.1">版本由1.1改為1.5

<schema name="example core zero" version="1.5">.

這樣查詢時分詞才能成功,比如搜索中華人民共和國,如果不配置的話,默認是短語匹配,就只搜索文檔中包含中華人民共和國的結果,但是如果配置了查詢分詞,那么中華、人民….都能被匹配。

IK分詞器使用與測試

之后在schema.xml中配置一個field用於測試,如下:

  1. <field name="Artist_Name" type="text_ik" indexed="true" stored="true"/>

然后打開solr的admin頁面:

可以看到分詞之后的效果。


免責聲明!

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



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