You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:55:56