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

问题描述 投票:9回答:9

我最近升级到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中发送数据,它工作正常。我尝试在文件末尾添加换行符和换行符。似乎没有用。

json elasticsearch elasticsearch-5 bulk-load
9个回答
22
投票

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

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

我希望它适合你。


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"

8
投票

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


7
投票

错误很明显:

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

所以你只需要在customers_full.json文件的末尾添加一个换行符就可以了。


2
投票

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


1
投票

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


1
投票

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

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

瞧,问题解决了


0
投票

你只需要打开json文件然后转到文件的末尾(Ctrl + end),然后请输入以打破一个新行。


0
投票

按Enter在json文件中输入行的结尾,然后再次运行该命令。

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


0
投票

这在我当地的设置中起作用。

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

© www.soinside.com 2019 - 2024. All rights reserved.