我最近升级到 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
如果我在 Elasticsearch 5.x 中内联发送数据,效果很好。我尝试将换行符以及换行符添加到文件末尾。好像没啥用啊
在 JSON 文件末尾添加 empty 行并保存文件,然后尝试运行以下命令
curl -XPOST localhost:9200/subscribers/ppl/_bulk?pretty --data-binary @customers_full.json -H 'Content-Type: application/json'
正如文件所说: 使用
--data-binary
标志而不是普通的 -d
-d
不保留换行符 并且不格式化 json。
我因为 JSON 格式而遇到这个问题。
错误非常明显:
The bulk request must be terminated by a newline [\n]
因此,您只需在
customers_full.json
文件末尾添加换行符即可。
我遇到了同样的问题,花了几个小时添加和删除换行符,然后有人指出我错误地输入了文件名...所以请注意,如果文件实际上不存在,curl 会抛出相同的错误,这使得这非常令人困惑.
我在使用 Elasticsearch 7.3 时遇到了类似的问题。
我是这样解决的。
.json
文件,例如 products.json
文件。.json
文件。.json
文件的末尾,然后按键盘上的 ENTER 键。.json
文件。这将在 .json
文件末尾创建一个新行。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"
仅此而已。
我希望这有帮助
对于使用 postman 向 ElasticSearch 发出请求的任何人
只需按 Enter 键即可创建一个空的新行!
瞧,问题解决了
这对我有用:
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 "@products.json"
您只需打开 json 文件,然后转到文件末尾(Ctrl+end),然后按 Enter 换行即可。
在 JSON 文件中按 Enter 行尾并再次运行命令。
curl -H "Content-Type: application/x-ndjson" -XPOST 'localhost:9200/customers/personal/_bulk?pretty&refresh' --data-binary @"generated.json"
我为此苦苦挣扎了一分钟。我的问题是由我的卷曲请求中
--data
和 -binary
之间的空格引起的,并给出了相同的错误 - must end with new line [\\n]}
。
因此请仔细检查卷曲请求中的它是
--data-binary
而不是 --data - binary
对我来说,问题只是由于文件名错误造成的。 我在命令中使用了 customer_full.json,而该文件在我的文件系统中被命名为 customer_full(不带扩展名)。
所以就我而言,这个命令对我有用:
curl -H "Content-Type: application/x-ndjson" -XPOST 'http://localhost:9200/customers/personal/_bulk?pretty&refresh' --data-binary @"customer_full"
当我使用下面的 CURL 命令时,我在使用 elastic 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,如下所示,以确保我的记录应以换行符和回车符结尾。
然后,它对我有用:
SELECT CONCAT('{"index":{"_id":"',id,'"}}\r\n',request_data,'\r\n') reqestData FROM cards
更重要的是,如果您使用的是 Windows,文件结尾应该有一个回车符和换行符 (CRLF)。另外,如果 JSON 中的任何行包含 CR 但不包含 LF,那么您将得到解析异常
Source: org.elasticsearch.common.bytes.BytesReference$MarkSupportingStreamInputWrapper@2d5ed2ca
当我使用
/Users/myName/file.json
时,问题会显示,但是当我使用 @/Users/myName/file.json
时,它会起作用。
这在我本地的设置中有效。
curl -H "Content-type:application/json" -XPOST "http://localhost:9200/customer/personal/_bulk?pretty" --data-binary @"generated.json"
如果您不使用数据文件,如何做到这一点?我遇到了问题,但无法从文件发送数据。
const data1 = {
"amount" : "100",
"@timestamp" : `${UTC_timestamp}`,
"transaction_attributes" : {
"channel" : "channel-foobarbaz",
"session_id" : "session-1234",
"information" : "iinformation-foobarbaznformation-foobarbaz"
},
"currency" : {
"currency_description" : "my currency description",
},
"external_timestamp" : "2021-12-03T11:22:55.206229500Z" };
// execute a post
let res = http.post(url,JSON.stringify(data1),params);
需要检查的一些事项: