Mac部署Elasticsearch 6.2.0与Kibana后Python客户端报406错误求助
解决Elasticsearch 6.2.0 + Python客户端的406 Content-Type错误
这个问题我之前也碰到过,核心原因是Elasticsearch 6.x及以后的版本要求所有写入/修改类请求必须携带Content-Type: application/json头,而你的Python客户端要么版本不匹配,要么没有自动添加这个头,导致ES返回406不支持的错误。
下面是具体的解决步骤:
第一步:确保Python Elasticsearch库版本与ES服务端匹配
Elasticsearch的客户端和服务端版本需要大版本一致(比如ES 6.x对应客户端6.x),如果你的客户端版本过高或过低,都可能出现兼容性问题。执行以下命令安装对应版本的库:pip install elasticsearch==6.2.0第二步:显式设置客户端的默认请求头
即使安装了对应版本,有时候客户端可能因为某些配置原因没有自动添加Content-Type头,你可以在初始化客户端时手动指定:from elasticsearch import Elasticsearch # 初始化客户端时添加Content-Type头 es = Elasticsearch( ["localhost:9200"], headers={"Content-Type": "application/json"} )额外注意:确认请求数据格式正确
确保你在调用es.index()、es.update()等方法时,传入的body参数是合法的Python字典(客户端会自动序列化为JSON),不要传入字符串格式的JSON,避免序列化问题。
为什么Kibana能正常操作?因为Kibana的Dev Tools在发送请求时,自动帮你添加了正确的Content-Type头,所以ES能正常处理请求,而Python客户端需要我们手动确保这个头被正确设置。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

