使用Python Bulk API向Elasticsearch插入JSON数组报错求助
解决Elasticsearch批量插入JSON数组的解析错误
问题根源
- 你把整个JSON数组
data直接赋值给了单条文档的_source,但Elasticsearch要求每条文档的_source必须是单个JSON对象,而非数组,这直接导致了解析失败。 - 函数逻辑错误,没有遍历
data数组里的100条记录,仅把整个数组当作一条文档处理,完全没实现批量插入的需求。 - 既然不需要自定义ID,直接移除
_id字段,让Elasticsearch自动生成唯一ID即可。
修正后的代码
from esService.esClient import ESCient from elasticsearch.helpers import bulk # data是包含约100条记录的JSON数组对象 def insert_bulk_record(self, index, data): docs = [] # 遍历数组中的每条记录,构造批量插入的文档结构 for item in data: doc = { "_index": index, "_source": item # 这里传入单条记录,而非整个数组 # 移除_id字段,由ES自动生成文档ID } docs.append(doc) # 执行批量插入并捕获错误 try: success_count, failed_items = bulk(self.esconnect, docs) print(f"成功插入{success_count}条记录,{len(failed_items)}条插入失败") except Exception as e: print(f"批量插入过程出错: {str(e)}")
错误说明
你遇到的not_x_content_exception异常,本质就是因为_source传入了数组格式的数据,Elasticsearch无法将其解析为合法的文档内容。修正后每条文档的_source都是单个JSON对象,就能正常完成解析和插入了。
内容的提问来源于stack exchange,提问作者arpit joshi
相关产品推荐
相关产品推荐

