1. 程式人生 > >搜尋引擎solr7.2.1+Jetty 分詞及自定義擴充套件詞庫的配置

搜尋引擎solr7.2.1+Jetty 分詞及自定義擴充套件詞庫的配置

分詞我理解的是,輸入的一句話,按照它自己定義的規則分為常用詞語。

首先,Solr有自己基本的型別,string、int、date、long等等。

  對於string型別,比如在你的core/conf/manage-schema檔案中,配置一個欄位型別為string型別,如果查詢符合“我是中國人”的資料,它就認為“我是中國人”是一個詞語。 
  但是如果你將該欄位設定成了分詞,即配置成了text_ik型別,就可能匹配“我”、“中國人”、“中國”、“中”、“人”帶有這些字的該欄位資料都可能被查詢到。這就是分詞帶來的結果。具體要按照各自的業務來配置是否分詞,分詞對於大文字欄位設定是合理的,但是對於小欄位,設定分詞是沒必要的,甚至有相反的結果。比如你的某一個叫姓名的欄位設定了分詞,還不如設定string,查詢時模糊匹配效果最好,(模糊匹配就是查詢條件兩邊加上*),當然也要看自己業務需求是什麼。

Solr分詞的配置如下:

2.將該分詞jar包放到你的solr執行tomcat中的webapps/solr/WEB-INF/lib資料夾中,例如我的是D:\Tomcat9Solr\webapps\solr\WEB-INF\lib。

3.然後,在你的solrHome下的某個core/conf資料夾中,找到manage-schema檔案,在改檔案中的最下邊新增配置如下內容:

<fieldType name="text_ik" class="solr.TextField">
    <analyzer type="index" useSmart="false"
        class="org.wltea.analyzer.lucene.IKAnalyzer"
/> <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer" /> </fieldType>

4.然後還是在這個manage-schema檔案中,找到你想配置分詞的欄位,將其type改為text_ik型別:

 這裡以dkdz為例,設定之前,在solr客戶端檢視是如下結果:


如果配置好分詞,它會智慧分詞,對於一些特殊的詞句,可能不會分成你想要的詞

  比如這麼一句話,“清池街辦新莊村”,配置好分詞後,會有如下的結果:


 分詞後的結果,並沒有你想要的“清池街辦新莊村”的這個詞,這種情況就需要配置自定義的擴充套件詞庫了。

擴充套件詞庫的配置很簡單,具體步驟如下:

1.前提是你要先配置好分詞

2  solr-7.2.1\server\solr-webapp\webapp\WEB-INF目錄下新增一個資料夾:classes

3 新增一個檔案:IKAnalyzer.cfg.xml ,與classes檔案同級,另在classes檔案下新建ext.dic和stoword.dic,不會新建dic的可以用文字另存為的方式儲存為dic檔案。

IKAnalyzer.cfg.xml 檔案即配置ext.dic和stopword.dic兩個字典庫的位置。具體配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
<comment>IK Analyzer 擴充套件配置</comment>
<!--使用者可以在這裡配置自己的擴充套件字典,多個以分號隔開 -->
<entry key="ext_dict">ext.dic;</entry> 
<!--使用者可以在這裡配置自己的擴充套件停止詞字典,多個以分號隔開-->
<entry key="ext_stopwords">stopword.dic;</entry> 
</properties>

  ext.dic即擴充套件詞庫的儲存檔案,比如我打算建立一個詞“清池街辦新莊村”這樣一個詞,那開啟該檔案,在裡邊新添一個即可:清池街辦新莊村, 注意: 檔案格式必需是:無BOM的UTF-8格式

新增的每個詞都自己佔一行就可以的。
  stopword.dic停止詞字典的配置,你可以將空格什麼的填進去,這裡不用這個字典配置。

3.配置完之後,需要重啟solr服務 solr stop -all ,solr start ,然後再回到開始的位置檢視一下“清池街辦新莊村”的分詞結果:



4.以上,即完成了擴充套件詞庫的配置。這樣就使勁的新增你的那些想分詞卻沒有分的詞了。