一、背景与目标
需要在同一个 Python 项目中同时支持:
- Elasticsearch 8.x / 9.x
- Easysearch(ES 兼容)
用户在前端选择搜索引擎后,后端要能正确连接并执行 DSL,且要处理 HTTPS 自签名证书等常见问题。
二、核心结论(先给结论)
| 方案 | 适用场景 | 优缺点 |
|---|---|---|
| elasticsearch 7.13.1 | 同时连 ES 和 Easysearch | 无产品校验,兼容性好,需 NumPy 2.0 兼容补丁 |
| elasticsearch 8.x/9.x | 仅连接官方 Elasticsearch | 有产品校验,会拒绝 Easysearch |
| opensearch-py | 仅连 Easysearch/OpenSearch | 需多一个依赖,增加复杂度 |
推荐做法:
使用 elasticsearch==7.13.1 作为唯一客户端,可同时连接 Elasticsearch 8.x/9.x 和 Easysearch。

三、问题拆解
3.1 产品兼容性校验
从 elasticsearch-py 7.14 起,客户端会校验服务端是否为'官方 Elasticsearch',连接 Easysearch、OpenSearch 等会抛出类似:
UnsupportedProductError / "The client noticed that the server is not a supported distribution of Elasticsearch"
- 7.13.1:没有该校验,可连接任意 ES 兼容服务
- 8.x:校验更严格,只认官方 Elasticsearch

官方文档明确说明:
https://elasticsearch-py.readthedocs.io/en/7.x/transports.html



