ES在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。处理中文分词,一般会使用IK分词器。
ik分词器安装
- 点击下载
- 进入
elasticsearch-7.15.0\plugins
目录,新建ik
文件夹,把下载文件解压进去 - 重启ES
重启时遇到ik和ES版本不一致的错误:
Plugin [analysis-ik] was built for Elasticsearch version 7.14.2 but version 7.15.0 is running
修改ik分词器的默认ES版本
打开elasticsearch-7.15.0\plugins\ik\plugin-descriptor.properties
文件
修改成es对应的版本
elasticsearch.version=7.15.0
ik分词器包含两种模式
- ik_smart:最少切分,粗粒度
- ik_max_word:最细切分,细粒度
POST /_analyze
{
"analyzer": "ik_smart",
"text": "我是中国人"
}
使用ik_samrt
分词,中国人
划分为一个分词
{
"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" : 2,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 2
}
]
}
ik分词拓展
要拓展ik分词器的词库,只需要修改一个ik分词器目录中的config目录中的IkAnalyzer.cfg.xml文件:
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic</entry>
在elasticsearch-7.15.0\plugins\ik\config
目录
- 新增
ext.dic
加入分词内容
例如:豪弘集团 - 新增
stopword.dic
加入过滤分词
例如:视察 - 重启ES
请求
POST _analyze
{
"analyzer": "ik_smart",
"text": "视察豪弘集团"
}
加入分词后的响应
{
"tokens" : [
{
"token" : "豪弘集团",
"start_offset" : 5,
"end_offset" : 9,
"type" : "CN_WORD",
"position" : 3
}
]
}
当我们添加了扩展分词,豪弘集团,变成了一个分词;视察没了
网友评论