ElasticSearch出现java.lang.IllegalStateException: duplicate plugin: - Plugin information:

本文讲述了在使用IK中文分词器后,ES服务因重复插件而崩溃,通过挂载文件夹、对比分析并删除冗余插件,修复了503问题,最后验证了中文分词功能正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了使用IK-中文分词器,特地去下载了一个,结果重启动ES之后,进入Kibana可视化界面,出现了503服务不可用;一开始以为是Kibana还没注册进ES中,结果等待了一会还是如此。

1.使用docker ps查看运行的容器,发现ES已经停掉了,只剩下了Kibana容器在运行
在这里插入图片描述

2.查看日志分析原因docker logs elasticsearch
在这里插入图片描述
根据提示可以得出是因为plugings目录下的插件IK分词器重复了。此时由于es容器无法启动,就无法直接去容器内部进行修改。不过幸运的是我对plugings、config、data这三个文件进行了挂载。进入挂载目录查看
在这里插入图片描述
对比两个文件中的内容
在这里插入图片描述
发现analysis-ik有的ik都有;将ananlysis-ik删除即可

3.重启ES,稍等片刻,访问http://ip:5601

在这里插入图片描述
成功!

4.测试中文分词功能

ES自带的分词器对中文不是很友好,它只能分成一个个的字。所以我们需要自己下载IK-中文分词器

IK-中文分词器下载:github.com/medcl/elasticsearch-analysis-ik/releases?page=1
在这里插入图片描述
在这里插入图片描述
分词成功!接下来就可以实现检索功能了

### Elasticsearch 启动时出现 `java.lang.IllegalStateException: No match found` 的原因分析 当 Elasticsearch 启动过程中遇到 `java.lang.IllegalStateException: No match found` 错误时,通常表明某个配置项未被正确定义或解析失败。以下是可能的原因及其解决方案: #### 1. 配置文件中的键值对不匹配 如果在 `elasticsearch.yml` 文件中存在错误的键值对定义,可能会导致此异常。例如,某些字段名拼写错误或者缺少必要的参数可能导致解析器无法找到对应的值。 建议检查以下常见配置项是否存在语法错误: - `cluster.name` - `node.name` - `network.host` - `http.port` 确保这些字段均按照官方文档的要求正确设置[^1]。 #### 2. 插件加载冲突 有时第三方插件(如 X-Pack 或其他自定义插件)可能存在版本兼容性问题,从而引发此类异常。特别是当插件所需的依赖库与当前运行环境不符时,容易触发类似的非法状态异常。 可以通过禁用所有非必要插件重新测试服务是否正常启动来验证这一点。具体操作如下: ```bash ./bin/elasticsearch-plugin list ``` 逐一卸载可疑插件并尝试重启服务直到定位到具体的冲突源为止[^2]。 #### 3. SSL/TLS 设置不当 对于启用了安全传输层协议 (SSL/TLS) 的场景下,若密钥存储路径(`keystore`)等相关属性指定有误也会抛出相似类型的例外情况。比如下面这个例子就说明了一个关于 keystore 路径为空所引起的 parse exception: > Exception in thread "main" org.elasticsearch.ElasticsearchParseException: null-valued setting found for key [xpack.security.transport.ssl.keystore.path] 因此需要确认所有的 ssl 相关选项都已合理赋值并且指向有效的资源位置[^3]。 --- ### 综合解决方案 为了彻底解决问题可以采取以下几个措施之一: - **仔细校验配置文件**: 使用 YAML linter 工具帮助发现潜在格式上的瑕疵; - **更新至最新稳定版软件包**: 官方持续修复各种 bug 及提升性能表现, 所以升级往往能有效缓解很多棘手状况 ; - **清理旧数据重试初始化流程**: 如果怀疑是由于先前残留的数据引起干扰,则考虑删除索引后再做全新部署. 最后附上一段简单的脚本用于自动化检测部分基础设定是否有明显偏差作为参考: ```python import yaml def validate_config(file_path): try: with open(file_path, 'r') as file: config = yaml.safe_load(file) required_keys = ['cluster.name', 'node.name', 'path.data'] missing_keys = [key for key in required_keys if not config.get(key)] if missing_keys: raise KeyError(f'Missing keys: {", ".join(missing_keys)}') print('Configuration validated successfully.') except FileNotFoundError: print("File does not exist.") except yaml.YAMLError as e: print(f'Error parsing YAML file: {e}') validate_config('/etc/elasticsearch/elasticsearch.yml') ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thecoastlines

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值