Solr 7.2.1 配置中文分詞器 IK Analyzer
阿新 • • 發佈:2019-02-11
一、什麼是中文分詞器?
為什麼不來個英文分詞器呢? “嘿,小夥子,就是你,說的就是你,你那麼有才咋不上天呢!” 首先我們來拽一句英文:“He is my favorite NBA star” 然後我們再來一句中文:“他是我最喜歡的NBA球星”從英文的結構我們很容易區分每個單詞,因為,每個單詞之間都是空格隔開的,你肯定不會這樣寫英文的吧 "HeismyfavoriteNBAstar",我去,你如果這麼寫,你要翻譯軟體如何是好
但是,中文就不一樣了了,上一篇我們講到solr的配置,我們知道solr是做搜尋的,做搜尋可不是全字串匹配啊,而是關鍵字匹配,還拿這句中文來說
二、什麼是停用詞(Stop Words)?
停用詞(Stop Words) ,詞典譯為“電腦檢索中的虛字、非檢索用字”。在SEO中,為節省儲存空間和提高搜尋效率,搜尋引擎在索引頁面或處理搜尋請求時會自動忽略某些字或詞,這些字或詞即被稱為Stop Words(停用詞)。
停用詞一定程度上相當於過濾詞(Filter Words),不過過濾詞的範圍更大一些,包含黃色、政治等敏感資訊的關鍵詞都會被視做過濾詞加以處理,停用詞本身則沒有這個限制。通常意義上,停用詞(Stop Words)大致可分為如下兩類:
1、使用十分廣泛,甚至是過於頻繁的一些單詞。比如英文的“i”、“is”、“what”,中文的“我”、“就”之類詞幾乎在每個文件上均會出現,查詢這樣的詞搜尋引擎就無法保證能夠給出真正相關的搜尋結果,難於縮小搜尋範圍提高搜尋結果的準確性,同時還會降低搜尋的效率。因此,在真正的工作中,Google和百度等搜尋引擎會忽略掉特定的常用詞,在搜尋的時候,如果我們使用了太多的停用詞,也同樣有可能無法得到非常精確的結果,甚至是可能大量毫不相關的搜尋結果。
2、文字中出現頻率很高,但實際意義又不大的詞。這一類主要包括了語氣助詞、副詞、介詞、連詞等,通常自身並無明確意義,只有將其放入一個完整的句子中才有一定作用的詞語。如常見的“的”、“在”、“和”、“接著”之類,比如“SEO研究院是原創的SEO部落格”這句話中的“是”、“的”就是兩個停用詞。
下載上面提供的中文分詞器的資源,我們可以開啟其中的stopword.dic檔案進行檢視
當然,這裡面的內容你是可以進行修改的,如果不夠你用,你甚至可以在擴充套件一個stopword.dic 我們再來看一下ext.dic分詞器字典裡面都藏了些什麼(將原來的內容改為如下)
如果我們的ext.dic不夠我們用了,或者我們想擴充套件其他詞庫,我們可以開啟IKAnalyzer.cfg.xml進行配置
而剩下的那兩個jar包,我們從名字上就知道,這是IK打通solr的“通道啊”
三、Solr配置IK Analyzer
(1)拷貝兩個jar包至:C:\tomcat-8\webapps\solr\WEB-INF\lib 資料夾下 (2)拷貝剩餘三個資原始檔至:C:\tomcat-8\webapps\solr\WEB-INF\classes資料夾下
(3)定位到目錄:D:\solr_home\newcore\conf下 (%SOLR_HOME%)
修改managed-schema檔案,在檔案內容的最後新增IK分詞filed,名稱為“text_ik”(也可以自己定義)
<!-- 新增IK分詞 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<field name="text_ik" type="text_ik" indexed="true" stored="true" multiValued="false"/>
四、重啟tomcat,訪問Solr,驗證IK分詞器
(1)
(2)有了text_ik,我們要怎麼用呢? 我們先來看一下,stopword.dic是怎麼影響中文分詞的
圖中,我們看到,對於“除此之外你們說的都對”這句話,IK分詞後的效果按理說應該是 "除此之外 此之外 之外" 而有了stopword停用詞“除此之外”後,IK分析的結果就成了“此之外 之外” 如果們把停用詞從stopword.dic裡面刪除掉,重啟tomcat後,再次訪問solr,我們會發現
現在,我們來看一下ext.dic是怎麼作用到中文語句上分詞的
如果去掉ext.dic裡面的部分內,重啟tomcat,再次訪問solr,會發現
好吧,只能說低估了IK的分詞能力(自身的詞庫),我們可以用下面的例子進行演示
這個例子可行,至此,IK中文分詞器成功配置到Solr 7.2.1中