上課我們介紹了倒排索引,在里面提到了分詞的概念,分詞器就是用來分詞的。
分詞器是ES中專門處理分詞的組件,英文為Analyzer,定義為:從一串文本中切分出一個一個的詞條,並對每個詞條進行標准化。它由三部分組成,
- Character Filters:分詞之前進行預處理,比如去除html標簽
- Tokenizer:將原始文本按照一定規則切分為單詞
- Token Filters:針對Tokenizer處理的單詞進行再加工,比如轉小寫、刪除或增新等處理,也就是標准化
預定義的分詞器
ES自帶的分詞器有如下:
- Standard Analyzer
- 默認分詞器
- 按詞切分,支持多語言
- 小寫處理
- 支持中文采用的方法為單字切分
- Simple Analyzer
- 按照非字母切分
- 小寫處理
- Whitespace Analyzer
- 空白字符作為分隔符
- Stop Analyzer
- 相比Simple Analyzer多了去除請用詞處理
- 停用詞指語氣助詞等修飾性詞語,如the, an, 的, 這等
- Keyword Analyzer
- 不分詞,直接將輸入作為一個單詞輸出
- Pattern Analyzer
- 通過正則表達式自定義分隔符
- 默認是\W+,即非字詞的符號作為分隔符
ES默認對中文分詞是一個一個字來解析,這種情況會導致解析過於復雜,效率低下,所以目前有幾個開源的中文分詞器,來專門解決中文分詞,其中常用的叫IK
中文分詞
安裝配置ik中文分詞插件
# 在Elasticsearch安裝目錄下執行命令,然后重啟es bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip
# 如果由於網絡慢,安裝失敗,可以先下載好zip壓縮包,將下面命令改為實際的路徑,執行,然后重啟es bin/elasticsearch-plugin install file:///path/to/elasticsearch-analysis-ik-6.3.0.zip
ik兩種分詞模式ik_max_word 和 ik_smart 什么區別?
-
ik_max_word: 會將文本做最細粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,中華人民,中華,華人,人民共和國,人民,人,民,共和國,共和,和,國國,國歌”,會窮盡各種可能的組合;
-
ik_smart: 會做最粗粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,國歌”。
你也可以直接上IK的github的教程來配置,https://github.com/medcl/elasticsearch-analysis-ik。
安裝完后,修改elasticsearch.yml文件,把ik分詞器設置為es的默認分詞器
index.analysis.analyzer.default.type:ik
重啟es,注意es中的每個節點都要進行上述配置。