前言
今天有一位球友反馈,说我之前部署的新环境中的ElasticSearch没有安装ik分词器。
前一段时间,我在新环境中重新部署了一套中间件的服务,包含了:Redis、ElasticSearch、RabbitM、RocketMQ等。
但当时部署了ElasticSearch之后,确实忘记了安装ik分词器插件。
今天我打算安装一下。
但遇到了一个版本不一致的问题。
1 案发现场
在安装ik插件之前,需要先确定一下之前安装的ElasticSearch服务器的版本。
我之前推荐大家使用chrome插件:Elasticvue,来管理和维护ElasticSearch。

在Elasticvue上查到安装的ElasticSearch服务端的版本是:7.17.23。
于是,我打算去ik官方下载一个对应的版本。
访问地址:https://github.com/infinilabs/analysis-ik/releases?page=2

让人意外的是ElasticSearch7对应的ik分词器的最高版本是:7.17.18。
二者不一样。
管不了,那么多了。
我将7.17.18这边版本的ik分词器下载下来,放到了云服务器的/usr/share/elasticsearch/plugins目录下的ik目录下。
重启ElasticSearch之后发现报错了。
java.lang.IllegalArgumentException: Plugin [analysis-ik] was built for Elasticsearch version 7.17.23 but version 7.17.18 is running原因是Elasticsearch和ik版本不一致。
2 如何解决问题?
ElasticSearch和ik版本不一致,一个的版本是:7.17.23,另一个的版本是:7.17.18,导致Elasticsearch服务启动失败了。
但ik的官方,并没有提供7.17.23这个版本,7以上的最高也只有7.17.18。
于是,我尝试了一下ik的8以上的版本,下载了8.11.1这个版本,重启ElasticSearch同样失败了。
看样子,只能让二者的版本一致,才能成功启动ElasticSearch了。
我此时,脑海中闪过的第一个念头是:直接重装ElasticSearch,安装7.17.18这个版本。
这样就能解决问题了。
但想到之前在云服务器上安装ElasticSearch花费了不少时间,包括修改一些配置,还有分配权限等。
如果花费的时间太久了,有点不太划算。
而且很多球友在开发商城项目时,需要用到ElasticSearch。
我在重新安装的过程中,可能会影响到他们的正常使用。
因此,我没有使用这套方案。
接下来,我看了看ik目录下的文件:

主要包含了一些jar和配置文件。
此时,我突然冒出一个想法:7.17.23和7.17.18,这两个版本差距不大,应该没有太多的改动。
为什么我不能直接将ik目录下的jar包名称和配置文件中的版本,直接改成7.17.23呢?
将elasticsearch-analysis-ik-7.17.18.jar文件名称改成了elasticsearch-analysis-ik-7.17.23.jar。
修改了plugin-descriptor.properties文件:

将其中的两个version的版本改成了7.17.23。
这样调整之后,重启ElasticSearch,发现可以正常启动了。
然后,我用Elasticvue插件测试了一下:

发现可以将:我是中国人 正确分词。
说明在ElasticSearch中安装ik分词器插件成功了。
我们有时候遇到问题,在网上查资料,不一定能够找不到答案。
搜索引擎也许没法帮助你,官方也没法帮到你。
此时,你通过查看源码或许可以解决问题。