白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库
文章目錄
- 概述
- ik配置文件
- IK自定義詞庫
- 自定義詞庫
- Step1 : 新建自定義分詞庫
- Step2 : 添加到ik的配置文件中
- Step3 :重啟es ,查看分詞
- 自定義停用詞庫
- Step1 : 新建自定義停用詞詞典
- Step2 : 添加到ik的配置文件中
- Step3 : 重啟es ,查看停用詞
概述
繼續跟中華石杉老師學習ES,第29篇
課程地址: https://www.roncoo.com/view/55
ik配置文件
配置文件位置: ${ES_HOME}/plugins/ik/config/IKAnalyzer.cfg.xml
IKAnalyzer.cfg.xml:
這里使用的是6.4.1版本對應的ik分詞器,可以看到 配置文件中 ext_dict和ext_stopwords 默認是空的,如果需要的話,我們可以修改該配置項。
幾個配置文件的作用
-
IKAnalyzer.cfg.xml:用來配置自定義詞庫
-
main.dic:ik原生內置的中文詞庫,總共有27萬多條,只要是這些單詞,都會被分在一起
-
quantifier.dic:存放了一些單位相關的詞
-
suffix.dic:存放了一些后綴
-
surname.dic:中國的姓氏
-
stopword.dic:英文停用詞
最常用的兩個
IK自定義詞庫
自定義詞庫
有一些特殊的流行詞,一般不會在ik的原生詞典main.dic里。
舉個例子,比如2019年很火的 “盤他”,我們到原生詞典main.dic中去查找下看看
這個時候,我們用ik的ik_max_word分詞器來查下分詞
GET _analyze {"text": ["盤他","杠精","脫粉"],"analyzer": "ik_max_word" }返回
{"tokens": [{"token": "盤","start_offset": 0,"end_offset": 1,"type": "CN_CHAR","position": 0},{"token": "他","start_offset": 1,"end_offset": 2,"type": "CN_CHAR","position": 1},{"token": "杠","start_offset": 3,"end_offset": 4,"type": "CN_CHAR","position": 2},{"token": "精","start_offset": 4,"end_offset": 5,"type": "CN_CHAR","position": 3},{"token": "脫","start_offset": 6,"end_offset": 7,"type": "CN_CHAR","position": 4},{"token": "粉","start_offset": 7,"end_offset": 8,"type": "CN_CHAR","position": 5}] }可以看到使用ik的 ik_max_word分詞器還是將每個漢字作為一個term , 這個時候去使用這些詞語去搜索,效果肯定不是很理想。
Step1 : 新建自定義分詞庫
我們這里新建個目錄 custom , 在該目錄下新建一個文件: artisan.dic
將希望不分詞的詞語放到該文件中,比如
盤他 杠精 脫粉Step2 : 添加到ik的配置文件中
在 ext_ditc節點 添加自定義的擴展字典 , ik本身提供的 extra_main.dic 詞語更加豐富,這里我們也添加進去吧
Step3 :重啟es ,查看分詞
重啟es
GET _analyze {"text": ["盤他","杠精","脫粉"],"analyzer": "ik_max_word" }返回
{"tokens": [{"token": "盤他","start_offset": 0,"end_offset": 2,"type": "CN_WORD","position": 0},{"token": "盤","start_offset": 0,"end_offset": 1,"type": "CN_WORD","position": 1},{"token": "他","start_offset": 1,"end_offset": 2,"type": "CN_CHAR","position": 2},{"token": "杠精","start_offset": 3,"end_offset": 5,"type": "CN_WORD","position": 3},{"token": "脫粉","start_offset": 6,"end_offset": 8,"type": "CN_WORD","position": 4}] }可以看到,和未添加自定義詞典相比,已經可以按照自己指定的規則進行分詞了。
自定義停用詞庫
比如了,的,啥,么,我們可能并不想去建立索引,讓人家搜索
可以看到
- stopword.dic 中是 英文 停用詞
- extra_stopword.dic 中文停用詞
驗證下分詞
GET _analyze {"text": ["啥類型"],"analyzer": "ik_max_word" }返回
{"tokens": [{"token": "啥","start_offset": 0,"end_offset": 1,"type": "CN_CHAR","position": 0},{"token": "類型","start_offset": 1,"end_offset": 3,"type": "CN_WORD","position": 1},{"token": "類","start_offset": 1,"end_offset": 2,"type": "CN_WORD","position": 2},{"token": "型","start_offset": 2,"end_offset": 3,"type": "CN_CHAR","position": 3}] }
可以看到 “啥”是建立了倒排索引的。那我們下面來將 “啥”添加到自定義的停用詞里,來驗證下吧。
Step1 : 新建自定義停用詞詞典
我們在新建的目錄 custom , 在該目錄下新建一個文件: artisan_stopword.dic , 添加停用詞
Step2 : 添加到ik的配置文件中
在 ext_stopwords節點 添加自定義的停用詞擴展字典 , ik本身提供的 extra_stopword.dic 這里我們也添加進去吧
Step3 : 重啟es ,查看停用詞
重啟es ,驗證停用詞
GET _analyze {"text": ["啥類型"],"analyzer": "ik_max_word" }返回
{"tokens": [{"token": "類型","start_offset": 1,"end_offset": 3,"type": "CN_WORD","position": 0},{"token": "類","start_offset": 1,"end_offset": 2,"type": "CN_WORD","position": 1},{"token": "型","start_offset": 2,"end_offset": 3,"type": "CN_CHAR","position": 2}] }可以看到 “啥”已經不會在倒排索引中了,自定義停用詞功能成功。
總結
以上是生活随笔為你收集整理的白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白话Elasticsearch28-IK
- 下一篇: 白话Elasticsearch30-IK