ElasticSearch中使用IK分詞器


IK分詞器是es的一個插件。我們知道只有通過適當的分詞,才能查詢到有意義的內容。例如:搜索“你好寒冰之光”,我們希望包含“你好”、“寒冰之光”的內容被搜索出來,而不是把所有包含“你”、“好”、“寒”、“冰”、“之”、“光”的內容都搜素出來,因為只有搜索所有意義的詞,才是正確的。分詞器就是來做分詞的,而IK是咱們中國人開發的分詞器,也是目前最流行的分詞器。

 

1、到github上下載最新的IK分詞器:https://github.com/medcl/elasticsearch-analysis-ik

 

2、將zip文件解壓縮到es的plugins目錄即可,改個名叫ik:

  

 

 3、config目錄下保存的就是全部的分詞配置,隨便打開一個.dic文件看看,你會發現里面保存的內容其實就是我們認為有意義的詞,得有好幾十萬個:

  

 

4、重啟一下es,讓它加載ik。訪問http://localhost:9100/,我們通過elasticsearch-head來搜索一下試試。我們來搜索“你好寒冰之光”這句話,看看它會怎么分詞。在查詢框里輸入http://localhost:9200/_analyze/,表示我們要做一下分析;post內容輸入{"analyzer":"ik_smart","text":"你好寒冰之光"},表示分析使用ik_smart(聰明分詞方式,還有一種是ik_max_word,表示最大化分詞,即盡可能把詞語分拆得很細)。要分析的內容是“你好寒冰之光”。提交請求:

  

 

  我們發現ik返回的分詞結果是“你好”、“寒冰”、“之光”。這說明它沒有把“寒冰之光”當成是一個有意義的詞。我想大家都想到了,因為我們就沒有把“寒冰之光”這個詞定義出來,所以ik當然就不知道了。那么,我們來試着自定義一下:

 

5、在config目錄下,新建一個文件custom.dic(名字可以自己指定)。我們把“寒冰之光”幾個字放進去,保存。

  

 

 6、修改配置文件IKAnalyzer.cfg.xml,把我們自定義的文件配置上:

  

 

 7、重啟es,我們再試試:

  

 

  這次發現ik返回的詞條是“你好”、“寒冰之光”。說明它已經知道“寒冰之光”是一個詞了。

 

8、我們再來看看ik_max_word模式下,ik會怎樣分詞:

  

 

  可以看到分成了4個詞語。這兩種模式下,分詞的策略是不同的,具體用哪種,取決於我們自己的需要。


免責聲明!

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



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