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

使用curl或Invoke-WebRequest向Elasticsearch导入文档失败

Elasticsearch批量导入数据报错:Error extracting routing: source didn't contain any routing fields

问题场景

向本地Elasticsearch集群导入sample-k8s-metrics.json文件数据,分别使用curl和PowerShell的Invoke-WebRequest执行批量导入操作,均返回相同错误。

使用的命令

curl命令

curl -s -H "Content-Type: application/json" \
   -XPOST http://localhost:9200/sample-01/_bulk?pretty \
   --data-binary @sample-k8s-metrics.json

PowerShell命令

Invoke-WebRequest -Uri "http://localhost:9200/sample-01/_bulk?pretty" -InFile "sample-k8s-metrics.json"  -ContentType "application/json" -Method POST 

错误响应详情

{
  "create" : {
    "_index" : "sample-01",
    "_id" : null,
    "status" : 400,
    "error" : {
      "type" : "illegal_argument_exception",
      "reason" : "Error extracting routing: source didn't contain any routing fields"
    }
  }
}

数据样例

{"create": {}}
{"@timestamp":"2022-06-20T23:59:40Z","kubernetes":{"host":"gke-apps-0","node":"gke-apps-0-0","pod":"gke-apps-0-0-0","container":{"cpu":{"usage":{"nanocores":62251,"core":{"ns":12828317850},"node":{"pct":2.77905e-05},"limit":{"pct":2.77905e-05}}},"memory":{"available":{"bytes":335503688},"usage":{"bytes":61401416,"node":{"pct":0.01770037710617187},"limit":{"pct":9.923134671484496e-05}},"workingset":{"bytes":693043},"rss":{"bytes":129761},"pagefaults":411638,"majorpagefaults":0},"start_time":"2021-03-30T07:59:06Z","name":"container-name-44"},"namespace":"namespace26"}}

排查方向

  • 检查索引路由配置:目标索引sample-01可能设置了routing.required: true,强制所有文档必须携带路由字段。执行以下命令查看索引设置:

    curl -XGET http://localhost:9200/sample-01/_settings?pretty
    

    若确实开启强制路由,可选择:

    • 修改索引设置,取消routing.required限制;
    • 在批量操作的每条指令中添加路由参数,比如将{"create": {}}改为{"create": {"_routing": "namespace26"}}(路由值可根据业务逻辑选取,如文档中的kubernetes.namespace字段)。
  • 验证批量数据格式:Elasticsearch批量API要求严格的行分隔格式——每行一个操作指令、每行一个文档,不能存在空行或格式错误。确认sample-k8s-metrics.json整个文件都符合该规范。

  • 核对版本兼容性:不同Elasticsearch版本对批量API的处理逻辑可能存在差异,确保使用的命令和数据格式与当前集群版本匹配。

  • 尝试全局默认路由:若索引需要路由但无需为每条文档单独指定,可在创建索引时配置默认路由规则,或在批量请求URL中添加全局routing参数(仅适用于所有文档共享同一路由的场景):

    curl -s -H "Content-Type: application/json" \
       -XPOST "http://localhost:9200/sample-01/_bulk?pretty&routing=default-value" \
       --data-binary @sample-k8s-metrics.json
    

内容的提问来源于stack exchange,提问作者Mightiev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:52:51