用过 Easysearch 的 Python 开发者大概都经历过同一个小尴尬:明明用的是 Easysearch,requirements.txt 里却得写着 elasticsearch==7.10.1。兼容是兼容,但心里总觉得有点别扭——版本锁死、包名错位、新特性跟不上。
现在,这个问题被官方解决了。INFINI Labs 上线了官方 Python 客户端 easysearch-py,包名就叫 easysearch,Apache 2.0 协议开源。不用再靠 elasticsearch-py 的兼容模式连 Easysearch 了。
它是什么
easysearch-py 基于 elasticsearch-py 7.10.1 衍生,由 INFINI Labs 开发。换句话说:API 你已经会用了,迁移成本几乎为零,只是导入路径和维护方变了。
官方建议:
- 新项目:直接用
easysearch - 老项目:继续用
elasticsearch==7.10.1兼容连接也没问题,两者 API 调用方式完全一致
3 分钟上手
安装
1 | pip install easysearch |
需要 async/await 支持的:
1 | pip install "easysearch[async]" |
建立连接
1 | from easysearch import Easysearch |
生产环境推荐用 CA 证书:
1 | from ssl import create_default_context |
写入与搜索
1 | # 单条写入 |
批量写入
1 | from easysearch.helpers import bulk |
Bool 组合查询与聚合
1 | # 组合查询 |
用了它有什么好处
对从 elasticsearch-py 过来的同学,感知最明显的是这几点:
- 包名对得上。 用的是 Easysearch,
import自然应该是easysearch,语义清晰,读代码的人一眼就懂。 - 不用再锁死
7.10.1。 Elastic 官方客户端在新版本里加入了严格的服务端版本校验,连非 Elastic 发行版会告警甚至拒连;官方客户端彻底绕过这个问题。 - 特性同步及时。 Easysearch 有自己的增强(压缩、审计、国密、跨集群复制等),官方客户端能第一时间跟进,不用等上游项目。
- 自主可控。 由 INFINI Labs 维护,中文社区响应快,合规场景下也更踏实。
其他继承自上游的能力也一个不少:自动节点发现、持久连接、负载均衡、失败惩罚、SSL、HTTP 认证、线程安全、插件化架构。
什么场景该用
- 从 Elasticsearch 迁移到 Easysearch 的项目:换个
import、调一下连接串就能跑,业务代码几乎不动。 - 金融、政企等合规敏感环境:Easysearch 默认安全模式 + 国密支持,Python 侧只管调用。
- AI / RAG 应用的检索层:关键词检索 + 向量检索混合方案下,有一个顺手的 Python 客户端能省掉不少胶水代码。
- 日志、商品、站内搜索等常规场景:资源占用比原生 ES 更友好,Python 开发体验一致。
一点小建议
- 生产环境别偷懒开
verify_certs=False,老老实实配 CA。 Easysearch实例线程安全,进程里复用一个就行。- 高吞吐写入走
bulk,别一条条index。 - 写完立刻查的场景记得
refresh="wait_for",避开近实时的”坑”。
结语
一个生态成熟不成熟,看它有没有自己的一等公民客户端就能感受出来。easysearch-py 的发布,对 Python 生态里用 Easysearch 的人来说是一个迟到但重要的信号:你不用再把自己伪装成 Elasticsearch 的用户了。
项目地址:https://github.com/infinilabs/easysearch-py,欢迎 Star、提 Issue、贡献 PR。
相关链接:
本博客所有文章除特别声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 镜湖!
评论

