批量请求在elasticsearch 6.1.1中抛出错误

Jud*_*Raj 13 json bulk-load elasticsearch elasticsearch-5

我最近升级到elasticsearch版本6.1.1,现在我无法批量索引json文件中的文档.我内联它,它工作正常.以下是该文件的内容:

{"index" : {}}
{"name": "Carlson Barnes", "age": 34}
{"index":{}}
{"name": "Sheppard Stein","age": 39}
{"index":{}}
{"name": "Nixon Singleton","age": 36}
{"index":{}}
{"name": "Sharron Sosa","age": 33}
{"index":{}}
{"name": "Kendra Cabrera","age": 24}
{"index":{}}
{"name": "Young Robinson","age": 20}
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时,

curl -XPUT 'localhost:9200/subscribers/ppl/_bulk?pretty' -H 'Content-Type: application/json' -d @customers_full.json
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

"error" : {
    "root_cause" : [
      {
        "type" : "illegal_argument_exception",
        "reason" : "The bulk request must be terminated by a newline [\n]"
      }
    ],
    "type" : "illegal_argument_exception",
    "reason" : "The bulk request must be terminated by a newline [\n]"
  },
  "status" : 400
Run Code Online (Sandbox Code Playgroud)

如果我在内联和弹性搜索5.x中发送数据,它工作正常.我尝试在文件末尾添加换行符和换行符.似乎没有用.

Sat*_*amy 29

在JSON文件的末尾添加行并保存文件,然后尝试运行以下命令

curl -XPOST localhost:9200/subscribers/ppl/_bulk?pretty --data-binary @customers_full.json -H 'Content-Type: application/json'
Run Code Online (Sandbox Code Playgroud)

我希望它适合你.

  • 我添加了新行,但问题仍然存在 (2认同)

And*_*d14 13

如文档所述:使用--data-binary标志而不是普通标志-d

-d不保留换行符也不格式化json

由于JSON格式,我遇到了这个问题。

  • 确实需要将此答案转到顶部。甚至在Mac上,--data-binary和-d的确不同。我以为二进制模式只能在Windows平台上有所作为! (3认同)

Val*_*Val 7

错误很明显:

The bulk request must be terminated by a newline [\n]
Run Code Online (Sandbox Code Playgroud)

因此,您只需在customers_full.json文件末尾添加换行符即可.

  • 我就是这么做的。我添加了一个换行符。我尝试添加换行符,仍然不起作用。 (4认同)
  • 而不是`-d`,您应该尝试使用`--data-binary` (3认同)

小智 5

我遇到了同样的问题,并在有人指出我输入错误的文件名之前花了几个小时添加和删除换行符......所以请注意,如果文件实际上不存在,curl 会抛出相同的错误,这使得这非常令人困惑。


Pro*_*ton 5

我在使用Elasticsearch 7.3时遇到了类似的问题。

我是这样解决的。

  1. 找到.json文件,说products.json文件。
  2. 双击以.json在文本编辑器中打开该文件。
  3. 滚动到文件末尾.json,然后按键盘上的 ENTER 键。
  4. 关闭.json文件。这将在文件末尾创建一个新行.json
  5. 返回终端并运行以下命令。

N/B:对于下面的命令,.json文件名是products.json我要导入的文件名http://localhost:9200/ecommerce/product

curl -H "Content-type: application/json" -XPOST "http://localhost:9200/ecommerce/product/_bulk?pretty" --data-binary "@products.json"
Run Code Online (Sandbox Code Playgroud)

就这样。

我希望这有帮助