使用JSON文件创建Elasticsearch索引报错求助(ES5.4.1/Ubuntu16.04)
排查Elasticsearch 5.4.1 索引创建失败的问题
嘿,我来帮你搞定这个Elasticsearch索引创建的报错!先理清楚你的场景:
你的环境与操作细节
- 运行环境:Elasticsearch 5.4.1 + Kibana 5.4.1 + Ubuntu 16.04
- 执行的创建命令:
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/plants/plants_type/1' --data-binary @plants_json.json - 收到的截断错误:
{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse"}],"type":"mapper_parsing_exception","reason":"failed to parse","caused_by":{"type":"not_x_c...
优先排查的几个方向
1. 先拿到完整的错误信息
你的错误被截断了,not_x_c...后面的内容才是关键!可以用两种方式获取完整错误:
- 给curl命令加
-v参数,打印完整响应:curl -v -H "Content-Type: application/json" -XPOST 'http://localhost:9200/plants/plants_type/1' --data-binary @plants_json.json - 查看Elasticsearch的日志文件,默认路径是
/var/log/elasticsearch/elasticsearch.log,里面会有详细的错误栈,能直接看到是哪个字段或JSON片段出了问题。
2. 检查JSON文件的合法性
这是最常见的原因:
- 用Ubuntu自带的
jq工具校验JSON格式,执行:
如果JSON有语法错误(比如缺逗号、引号不配对、括号没闭合),jq . plants_json.jsonjq会直接指出问题位置。 - 检查文件编码:如果JSON是UTF-8带BOM头的格式,Elasticsearch 5.x会解析失败。可以用
file plants_json.json查看编码,要是有BOM,用这个命令去掉:sed -i '1s/^\xEF\xBB\xBF//' plants_json.json
3. 检查索引映射冲突
如果plants索引已经存在,可能之前定义的字段映射和你现在JSON里的字段类型不兼容:
- 比如之前把
height字段设为integer,现在JSON里传了字符串"1.5m",就会触发解析错误。 - 可以先删除旧索引(如果数据不重要),再重新尝试:
curl -XDELETE 'http://localhost:9200/plants'
4. 用极简JSON做测试
先排除命令本身的问题,执行这条极简请求:
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/plants/plants_type/1' -d '{"name": "Sunflower", "category": "Flower"}'
如果这个请求能成功,那100%是你的plants_json.json文件有问题,重点回到第二步排查文件内容。
内容的提问来源于stack exchange,提问作者M.liza
相关产品推荐
相关产品推荐

