Elasticsearch 使用中文分詞
本文演示瞭如何使用IK Analysis 外掛來實現在 Elasticsearch 中的中文分詞功能。
使用中文分詞
在“Spring Boot應用企業級部落格系統”課程中(http://coding.imooc.com/class/125.html),所有的部落格功能都已經完成了。讀者朋友們開始愉快地使用部落格來發表部落格了。但如果朋友們足夠細心的話,發現在輸入中文的標籤的時候,存在一定的問題。
比如,當我們想將某個部落格標記為“大神”時,部落格系統卻將這個單詞粗暴的分成了如圖21-2所示的兩個詞“大”和“神”。顯然,這並不符合使用者的使用習慣。
這是 Elasticsearch 語言分析器上的限制,它並不能友好的處理所有語言,特別是中文。這種情況下,我們就需要額外的中文分詞器來協助我們了。
本章節,我們將演示使用 IK Analysis 外掛來幫助我們實現中文分詞。
IK Analysis 外掛
IK Analysis 外掛(https://github.com/medcl/elasticsearch-analysis-ik/)就是一款專門用於 Elasticsearch 的分詞器,可以友好的處理中文。
IK Analysis 外掛將 Lucene IK 分析儀(http://code.google.com/p/ik-analyzer/)整合到了 Elasticsearch 中,從而支援自定義分詞。
安裝 IK Analysis
安裝 IK Analysis 非常簡單。主要有兩種方式。
使用 elasticsearch-plugin
如果 Elasticsearch 是 5.5.1 以後的版本,可以使用 elasticsearch-plugin 來安裝,安裝方式如下:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.1/elasticsearch-analysis-ik-5.5.1.zip
下載解壓到指定目錄
另外一種方式是,下載安裝包,解壓到 Elasticsearch 安裝目錄的 /plugins/
目錄下即可。
下圖展示了 IK 的安裝目錄。
需要注意的是,不管是哪種安裝方式,相應的外掛,要對應相應的 Elasticsearch 版本,否則可能會安裝不成功。
下載地址為 https://github.com/medcl/elasticsearch-analysis-ik/releases。本章節,我們使用 IK Analysis for Elasticsearch 5.5.0 版本。
使用 IK Analysis
要使用 IK Analysis,需要在文件類裡面,指定相應的分詞器。我們在 EsBlog 的 tags 屬性上,添加了searchAnalyzer = "ik_smart", analyzer = "ik_smart"
的註解內容就可以了。
public class EsBlog implements Serializable {
...
@Field(type = FieldType.text,fielddata = true, searchAnalyzer = "ik_smart", analyzer = "ik_smart")
private String tags; // 標籤
下圖展示了使用了IK分詞的標籤效果
IK Analysis 型別
ik_smart 是 IK Analysis 其中一種分詞形式。IK Analysis主要有兩種型別的分詞形式,分別是 ik_max_word 和 ik_smart。
- ik_max_word: 會將文字做最細粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國”、“中華人民”、“中華”、“華人”、“人民共和國”、“人民”、“人”、“民”,、“共和國”、“共和”、“和”、“國歌”等,會窮盡各種可能的組合;
- ik_smart: 會做最粗粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國”、“國歌”。