Elasticsearch批量导入JSON文件遇parse_exception错误求助
问题排查与解决方法
我来帮你搞定这个导入错误!你的问题主要出在两个地方:curl命令的符号格式错误,以及JSON文件不符合Elasticsearch Bulk API的要求,下面一步步给你拆解:
一、错误根源分析
1. curl命令的符号问题
看你写的命令:
curl -s -H “Content-Type: application/x-ndjson” -XPOST localhost:9200/_bulk —-data-binary “@restaurants.json”; echo
这里有两个致命的符号错误:
- 用了中文双引号“”,而curl只识别英文双引号""
---data-binary里的是中文长破折号,正确的应该是英文双横杠--data-binary
这些错误会导致curl无法正确解析参数,自然读不到你的JSON文件内容,所以返回request body is required的错误。
2. JSON格式不符合Bulk API要求
Elasticsearch的_bulk接口要求的是**NDJSON(换行分隔的JSON)**格式,而不是你现在用的普通JSON数组。NDJSON的规则是:
- 每行一个JSON对象
- 每两个行为一组:第一行是操作指令(比如
index),第二行是文档内容
你的文件是数组结构,直接导入肯定不被识别。
二、分步解决方法
步骤1:修正curl命令
把所有符号换成英文的,正确命令如下:
curl -s -H "Content-Type: application/x-ndjson" -XPOST localhost:9200/_bulk --data-binary "@restaurants.json"; echo
步骤2:转换JSON文件为NDJSON格式
推荐用jq工具来快速转换(如果没装的话,用包管理器比如apt/yum/brew安装即可)。执行以下命令,把你的数组格式JSON转换成Bulk需要的格式:
# 转换原文件为bulk兼容的NDJSON,生成新文件bulk_restaurants.json jq -c '.[] | {"index": {"_index": "restaurants", "_id": .id}}, .' restaurants.json > bulk_restaurants.json
这个命令的作用是:
- 遍历原数组里的每个餐厅对象
- 为每个对象生成一行
index操作指令(指定索引名为restaurants,用文档自带的id作为Elasticsearch的文档ID) - 紧接着输出一行该餐厅的JSON内容
转换后的文件内容示例(对应你给的单个对象):
{"index":{"_index":"restaurants","_id":"30191841"}} {"address":{"building":"351","coord":[-73.98513559999999,40.7676919],"street":"West 57 Street","zipcode":"10019"},"borough":"Manhattan","cuisine":"Irish","name":"Dj Reynolds Pub And Restaurant","grades":[{"date":{"$date":"2014-09-06T00:00:00.000Z"},"grade":"A","score":2},{"date":{"$date":"2013-07-22T00:00:00.000Z"},"grade":"A","score":11},{"date":{"$date":"2012-07-31T00:00:00.000Z"},"grade":"A","score":12},{"date":{"$date":"2011-12-29T00:00:00.000Z"},"grade":"A","score":12}],"id":"30191841"}
步骤3:执行导入
用修正后的命令导入转换好的文件:
curl -s -H "Content-Type: application/x-ndjson" -XPOST localhost:9200/_bulk --data-binary "@bulk_restaurants.json"; echo
三、额外注意事项
- 确保你的Elasticsearch服务正在运行,并且能通过
localhost:9200访问 - 如果是Elasticsearch 7.x及以上版本,不需要指定
_type(已经移除了类型概念),上面的命令已经适配了这一点 - 如果你不想用
jq,也可以手动修改JSON文件,按照“操作行+文档行”的格式逐行编写,不过数据多的话还是脚本更高效
内容的提问来源于stack exchange,提问作者Vivek Malhotra
相关产品推荐
相关产品推荐

