ES在創(chuàng)建倒排索引時(shí)需要對(duì)文檔分詞;在搜索時(shí),需要對(duì)用戶輸入內(nèi)容分詞。但默認(rèn)的分詞規(guī)則對(duì)中文處理并不友好。處理中文分詞,一般會(huì)使用IK分詞器。
ik分詞器安裝
- 點(diǎn)擊下載
- 進(jìn)入
elasticsearch-7.15.0\plugins目錄,新建ik文件夾,把下載文件解壓進(jìn)去 - 重啟ES
重啟時(shí)遇到ik和ES版本不一致的錯(cuò)誤:
Plugin [analysis-ik] was built for Elasticsearch version 7.14.2 but version 7.15.0 is running
修改ik分詞器的默認(rèn)ES版本
打開elasticsearch-7.15.0\plugins\ik\plugin-descriptor.properties文件
修改成es對(duì)應(yīng)的版本
elasticsearch.version=7.15.0
ik分詞器包含兩種模式
- ik_smart:最少切分,粗粒度
- ik_max_word:最細(xì)切分,細(xì)粒度
POST /_analyze
{
"analyzer": "ik_smart",
"text": "我是中國(guó)人"
}
使用ik_samrt分詞,中國(guó)人劃分為一個(gè)分詞
{
"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" : "中國(guó)人",
"start_offset" : 2,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 2
}
]
}
ik分詞拓展
要拓展ik分詞器的詞庫(kù),只需要修改一個(gè)ik分詞器目錄中的config目錄中的IkAnalyzer.cfg.xml文件:
<comment>IK Analyzer 擴(kuò)展配置</comment>
<!--用戶可以在這里配置自己的擴(kuò)展字典 -->
<entry key="ext_dict">ext.dic</entry>
<!--用戶可以在這里配置自己的擴(kuò)展停止詞字典-->
<entry key="ext_stopwords">stopword.dic</entry>
在elasticsearch-7.15.0\plugins\ik\config目錄
- 新增
ext.dic加入分詞內(nèi)容
例如:豪弘集團(tuán) - 新增
stopword.dic加入過(guò)濾分詞
例如:視察 - 重啟ES
請(qǐng)求
POST _analyze
{
"analyzer": "ik_smart",
"text": "視察豪弘集團(tuán)"
}
加入分詞后的響應(yīng)
{
"tokens" : [
{
"token" : "豪弘集團(tuán)",
"start_offset" : 5,
"end_offset" : 9,
"type" : "CN_WORD",
"position" : 3
}
]
}
當(dāng)我們添加了擴(kuò)展分詞,豪弘集團(tuán),變成了一個(gè)分詞;視察沒了