使用@elastic/elasticsearch时出现服务器非受支持Elasticsearch发行版报错
报错信息:The client noticed that the server is not a supported distribution of Elasticsearch
这个报错是Elastic官方在@elastic/elasticsearch7.11及以上版本引入的发行版校验逻辑,会校验连接的服务端是否为官方许可的Elasticsearch发行版。你使用了^7.5.0的版本声明,重新部署安装依赖时,包管理工具会自动拉取7.x分支的最新版本(高于7.11),如果你的服务端是OpenSearch、云厂商托管的非官方ES修改版、自定义构建版,就会触发该报错。
- 执行命令
npm ls @elastic/elasticsearch(npm环境)或yarn list @elastic/elasticsearch(yarn环境),确认实际安装的客户端版本是否≥7.11.0 - 确认你连接的ES服务端发行版:非Elastic官方发布的版本都会触发校验
- 检查
loopback-connector-esv6的依赖声明,确认是否对客户端版本做了宽松限制,导致自动升版
方案1:锁死客户端版本(最快生效)
直接固定@elastic/elasticsearch的版本为无校验的7.5.0,修改package.json中的声明:
将"@elastic/elasticsearch": "^7.5.0"调整为"@elastic/elasticsearch": "7.5.0"
删除项目下的node_modules文件夹、package-lock.json(或yarn.lock)文件,重新执行npm install或yarn install即可。
方案2:关闭发行版校验
如果需要使用高版本客户端,在ES客户端初始化配置中添加disableProductCheck: true关闭校验即可。
如果是通过LoopBack 4的datasource配置,直接在数据源的ES配置项中新增该参数,配置会自动透传给底层客户端:
// datasource配置示例 { "name": "es", "connector": "esv6", "version": "7.5", "host": "你的ES地址", "port": 9200, "disableProductCheck": true }
方案3:更换兼容客户端
如果服务端已经切换为OpenSearch等兼容分支,可以替换客户端为@opensearch-project/opensearch,该客户端完全兼容ES 7.x的API,无发行版校验逻辑,同步调整对应的connector配置即可。
内容的提问来源于stack exchange,提问作者Ami Ine

