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
启动成功如下:
访问成功:
2. 为什么使用IK分词器:
自带ES默认标准分词器
ES默认自带的分析器,是标准分词器,针对英文好使,但是针对中文,只能把汉字一个个拆分,不符合中文插叙需求。
我们测试下标准分词器,看看标准分词器如何处理 “今天天气真好” 这个字符串:由此图片可以看出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
2.ik_max_word
结果对比,ik_max_word与ik_smart分词对比,ik_max_word分的更为详细、更多一些
自定义词库
我们分词“今天天气真好”这个字符串,结果如下
我们想要将“今天天气真好”为一个完整的词,但是结果并没有,这个时候需要我们去词库添加这个词
1.在es的插件目录中,我们添加了IK分词器,在分词器目录下,有个config目录,
pluginselasticsearch-analysis-ik-7.15.2config
在congif中,添加一个mydic.dic的文件,名字随意,后缀为dic;
2.在mydic.dic文件中添加词汇:
3.保存后,修改在elasticsearch-analysis-ik-7.15.2/config目录的IKAnalyzer.cfg.xml文,内容:
4.重启es;如果是es集群,每个节点都需要改;
测试下:
ik_smart:
ik_max_word:
现在分词都有“今天天气真好”这个词了,这里就介绍IK分词器到这里,如有其他问题欢迎讨论,如有问题还望指正,验证后,必会修改。