我最近升级到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文件的末尾添加空行并保存文件,然后尝试运行以下命令
curl -XPOST localhost:9200/subscribers/ppl/_bulk?pretty --data-binary @customers_full.json -H 'Content-Type: application/json'
我希望它适合你。
这对我有用:
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"
正如文档所说:使用--data-binary标志而不是plain -d。后者不保留换行符,也不格式化json。由于JSON格式化,我遇到了这个问题。
错误很明显:
The bulk request must be terminated by a newline [\n]
所以你只需要在customers_full.json
文件的末尾添加一个换行符就可以了。
我遇到了同样的问题,并花了好几个小时添加和删除换行符,然后有人指出我错误输入了文件名...所以请注意,如果文件实际上不存在,curl会抛出相同的错误,这使得这个超级混乱。
您需要在curl请求中使用--data-binary而不是-d。请参阅https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html
对于任何使用邮递员向ElasticSearch发出请求的人
只需按Enter键即可创建一个空的新行!
瞧,问题解决了
你只需要打开json文件然后转到文件的末尾(Ctrl + end),然后请输入以打破一个新行。
按Enter在json文件中输入行的结尾,然后再次运行该命令。
curl -H“Content-Type:application / x-ndjson”-XPOST'localhost:9200 / customers / personal / _bulk?pretty&refresh'--data-binary @“generated.json”
这在我当地的设置中起作用。
curl -H“Content-type:application / json”-XPOST“http://localhost:9200/customer/personal/_bulk?pretty”--data-binary @“generated.json”