搜尋引擎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停止詞字典的配置,你可以將空格什麼的填進去,這裡不用這個字典配置。