ElasticSearch集成IK分词器

1、 解决ElasticSearch集成IK分词器报ES_JAVA_HOME不匹配问题:

原因:ES7运行时会报错,提示ES_JAVA_HOME不匹配之类的,这是Elasticsearch在7之后的版本内置了JDK,而内置的JDK是当前推荐的JDK版本。当然如果你本地配置了JAVA_HOME那么ES就是优先使用配置的JDK启动ES,我们日常的代码开发都是使用的JDK1.8,所以这里不会把JAVA_HOME配置成JDK11,我们只需更改Elasticsearch的启动文件,使它指向我们下载的JDK11。首先在我们elasticsearch-env最末尾添加如下代码。

#配置自己的jdk11
export JAVA_HOME=D:elasticsearch-7.15.2-windows-x86_64elasticsearch-7.15.2jdk
export PATH=$JAVA_HOMEin:$PATH


#添加jdk判断
if [ -x "$JAVA_HOME/bin/java" ]; then
        JAVA="D:elasticsearch-7.15.2-windows-x86_64elasticsearch-7.15.2jdkinjava"
else
        JAVA=`which java`
fi

启动成功如下:在这里插入图片描述
访问成功:ElasticSearch集成IK分词器_第1张图片

2. 为什么使用IK分词器:

自带ES默认标准分词器
ES默认自带的分析器,是标准分词器,针对英文好使,但是针对中文,只能把汉字一个个拆分,不符合中文插叙需求。

我们测试下标准分词器,看看标准分词器如何处理 “今天天气真好” 这个字符串:ElasticSearch集成IK分词器_第2张图片由此图片可以看出ES自带默认分词器针对中文分词并不理想,所以我们需要IK分词器,换而言之针对中文我们需要使用到IK分词器。

3. IK分词器

IKAnalyzer是一个开源的,基于java开发的轻量级的中文分词工具包。ES默认没有携带IK分词器,需要下载,下载地址(PS:根据ES版本下载压缩包,并解压缩到ES的plugins文件夹下,请下载第一个ZIP):
https://github.com/medcl/elasticsearch-analysis-ik/releases

下载安装:
1.下载IK压缩包,本文使用ES是7.15.2,下载的IK也是7.15.2;
2.解压放到es安装目录中的plugin目录中,解压缩完毕后可以把压缩包删除或移除。
3.重启es即可

测试效果

IK分词器,支持两种算法。分别为:

ik_smart :最少切分

ik_max_word :最细粒度切分

下面看效果,还是测试 “今天天气真好” 这个字符串。

1.ik_smart
ElasticSearch集成IK分词器_第3张图片
2.ik_max_word

ElasticSearch集成IK分词器_第4张图片
结果对比,ik_max_word与ik_smart分词对比,ik_max_word分的更为详细、更多一些

自定义词库

我们分词“今天天气真好”这个字符串,结果如下
ElasticSearch集成IK分词器_第5张图片
我们想要将“今天天气真好”为一个完整的词,但是结果并没有,这个时候需要我们去词库添加这个词

1.在es的插件目录中,我们添加了IK分词器,在分词器目录下,有个config目录,

pluginselasticsearch-analysis-ik-7.15.2config

在congif中,添加一个mydic.dic的文件,名字随意,后缀为dic;

2.在mydic.dic文件中添加词汇:
ElasticSearch集成IK分词器_第6张图片
3.保存后,修改在elasticsearch-analysis-ik-7.15.2/config目录的IKAnalyzer.cfg.xml文,内容:
ElasticSearch集成IK分词器_第7张图片4.重启es;如果是es集群,每个节点都需要改;

测试下:

ik_smart:

ElasticSearch集成IK分词器_第8张图片
ik_max_word:
ElasticSearch集成IK分词器_第9张图片
现在分词都有“今天天气真好”这个词了,这里就介绍IK分词器到这里,如有其他问题欢迎讨论,如有问题还望指正,验证后,必会修改。

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