SpringBoot整合ES,ik分词器

"reason": "Failed to parse mapping: analyzer [ik_max_word] has not been configured in mappings"

SpringBoot整合ES,ik分词器_第1张图片

 这是因为没有安装ES的IK分词器

下载地址 Release v8.7.0 · medcl/elasticsearch-analysis-ik · GitHub

ElasticSearch 内置了分词器,如标准分词器、简单分词器、空白词器等。但这些分词器对我们最常使用的中文并不友好,不能按我们的语言习惯进行分词。

ik分词器就是一个标准的中文分词器。它可以根据定义的字典对域进行分词,并且支持用户配置自己的字典,所以它除了可以按通用的习惯分词外,我们还可以定制化分词。

ik分词器是一个插件包,我们可以用插件的方式将它接入到ES。

一、安装

1.1 下载

medcl/elasticsearch-analysis-ik​github.com/medcl/elasticsearch-analysis-ik

注意:下载的包一定要和 ElasticSearch 的版本一致。点击右侧的 Releases ,选择版本

SpringBoot整合ES,ik分词器_第2张图片

不要下载源码包

SpringBoot整合ES,ik分词器_第3张图片

1.2 安装

将下载的zip包解压到ES的 plugins 目录即可,别忘了重启ES

以windows为例

在ES目录的plugins目录下创建ik子目录,然后将解压的内容移到里面

注意:删除拷贝过来的 elasticsearch-analysis-ik-7.12.1.zip 包

SpringBoot整合ES,ik分词器_第4张图片

最后重启ES,界面可以看到加载的ik插件

也可以用命令查看当前加载的ik插件

重启过程可能会出现闪退情况,不要慌。按前面提到的注意事项检查

1、版本号是否匹配

2、包是否下载错

3、多余包是否删除

二 、ik分词器2种模式

ik_smart 最粗粒度的拆分

ik_max_word 最细粒度的拆分

它们其实就是2中分词算法,其区别直接通过测试观察

三、测试

ik_smart

SpringBoot整合ES,ik分词器_第5张图片

ik_max_word

SpringBoot整合ES,ik分词器_第6张图片

可以看出 ik_max_word 比 ik_smart 划分的词条更多,这就是它们为什么叫做最细粒度和最粗粒度。

四、自定义字典

问题:如何把 金毛狮王 拆分成“金毛”“狮王”“金毛狮王”三个词条?

默认2种模式都会拆分成 “金”“毛”“狮王”三个词条。不符合我们的要求

SpringBoot整合ES,ik分词器_第7张图片

根据默认拆分的结果,发现我们需要增加“金毛”和“金毛狮王”2个词条并删除“金”和“毛”2个词条。这里就可以用自定义字典来实现

打开 ..\elasticsearch-7.12.1\plugins\ik\config\IKAnalyzer.cfg

可以看到有2个配置 ext_dict 和 ext_stopwords。分别是扩展和停用字典

SpringBoot整合ES,ik分词器_第8张图片

参照默认的dic文件,在config目录新建 my_ext.dic 和 my_stop.dic

然后配置到 IKAnalyzer.cfg

SpringBoot整合ES,ik分词器_第9张图片

重启ES。启动日志可以看到加载了我们的字典

测试

ik_max_word 正是我们想要的效果

SpringBoot整合ES,ik分词器_第10张图片

ik_smart 只有金毛狮王一个词条

SpringBoot整合ES,ik分词器_第11张图片

注意:配置好重启后可能发现并没有效果,不慌,检查下文件的编码格式是否UTF-8

SpringBoot整合ES,ik分词器_第12张图片

 

Plugin [analysis-ik] was built for Elasticsearch version 8.7.0 but version 8.7.1 is running

ik分词器和es版本号不一致导致的

你可能感兴趣的:(elasticsearch,大数据,搜索引擎)