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

时间:2018-02-02 09:52:21

标签: json elasticsearch elasticsearch-5 bulk-load

我最近升级到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}

当我运行此命令时,

curl -XPUT 'localhost:9200/subscribers/ppl/_bulk?pretty' -H 'Content-Type: application/json' -d @customers_full.json

我收到此错误:

"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

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

16 个答案:

答案 0 :(得分:22)

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

curl -XPOST localhost:9200/subscribers/ppl/_bulk?pretty --data-binary @customers_full.json -H 'Content-Type: application/json'

我希望它适合你。

答案 1 :(得分:8)

正如文档所说:使用--data-binary标志而不是plain -d。后者不保留换行符不格式化json 。 由于JSON格式化,我遇到了这个问题。

答案 2 :(得分:7)

错误很明显:

The bulk request must be terminated by a newline [\n]

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

答案 3 :(得分:2)

我遇到了同样的问题,并花了好几个小时添加和删除换行符,然后有人指出我错误输入了文件名...所以请注意,如果文件实际上不存在,curl将抛出相同的错误,使这个超级-confusing。

答案 4 :(得分:2)

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

仅此而已。

我希望这会有所帮助

答案 5 :(得分:1)

您需要在curl请求中使用--data-binary而不是-d。请参阅https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html

答案 6 :(得分:1)

适用于任何使用邮递员向ElasticSearch发出请求的人

  

只需按Enter即可创建一个空的新行!

瞧,问题解决了

答案 7 :(得分:1)

使用ElasticSearch 7.5.1在Windows 10上运行时,我遇到了同样的问题。

我尝试了所有答案;他们都没有工作。我确定文件末尾有换行符。

要使其正常工作,我必须确保上传的文件使用UNIX行尾字符(仅0A,没有0D),并且编码必须为UTF-8。

ElasticSearch Bulk Fail

使用Notepad ++,您可以编辑文件的元数据。

Update EOL

Update Encoding

最后一些好消息:

enter image description here

答案 8 :(得分:1)

对我来说,问题仅归因于文件名错误。 我在命令中使用了customer_full.json,其中文件在我的文件系统中命名为customer_full(无扩展名)。

所以在我的情况下: curl -H“内容类型:应用程序/ x-ndjson” -XPOST'http://localhost:9200/customers/personal/_bulk?pretty&refresh'--data-binary @“ customer_full”

命令对我有用。

答案 9 :(得分:1)

在CURL命令下使用弹性7.9.1时,我在Windows上遇到类似的问题。

curl -s -H "Content-Type: application/json" -XPOST localhost:9200/accounts/docs/_bulk?filter_path=items.*.error --data-binary  "@textoutES.json"  >> erroredAtES.json"

我试图在文件末尾手动添加换行符,但是没有用。

我通过从如下所示的mysql数据库中提取数据来创建JSON,以确保我的记录应以LINE FEED和CARRIAGE RETURN结尾。

然后,它对我有用。

SELECT CONCAT('{"index":{"_id":"',id,'"}}\r\n',request_data,'\r\n') reqestData FROM cards 

更重要的是,如果您使用的是Windows,则文件结尾应具有回车符和换行(CRLF)。另外,如果JSON中的任何行包含CR但不包含LF,那么您将获得解析异常“来源:org.elasticsearch.common.bytes.BytesReference$MarkSupportingStreamInputWrapper@2d5ed2ca”

Windows CRLF and EOF

答案 10 :(得分:1)

我为此忙了一会儿……我的是由于我的curl请求中--data和-binary之间的空格引起的,并给出了相同的错误-“必须以新行[\ n]结尾}“ ...

因此请仔细检查一下curl要求是否为-data-binary 而不是--data-binary

答案 11 :(得分:0)

你只需要打开json文件,然后转到文件的末尾(Ctrl + end),然后按Enter键打开一个新行。

答案 12 :(得分:0)

在json文件中按Enter键,然后再次运行命令。

curl -H“内容类型:application / x-ndjson” -XPOST'localhost:9200 / customers / personal / _bulk?pretty&refresh'--data-binary @“ generated.json”

答案 13 :(得分:0)

这在我的本地设置中有效。

curl -H“ Content-type:application / json” -XPOST“ http://localhost:9200/customer/personal/_bulk?pretty” --data-binary @“ generation.json”

答案 14 :(得分:0)

这对我有用:

curl -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/bank/_bulk?pretty&refresh" --data-binary "@C:\Program Files\Elastic\Elasticsearch\7.2.0\accounts.json"

答案 15 :(得分:0)

我只是忘记了像这样的文件名之前的加号和@符号

--data-binary "@products.json"