Elasticsearch / Curl不会读取Bulk API的换行符

时间:2016-03-24 10:22:26

标签: curl elasticsearch

我目前正在运行Windows 10,并且在cmd.exe中使用curl_7_47_1_openssl_nghttp2_x64,我的问题是每当我尝试在elasticsearch中使用批量API输入数据时,我总是会收到此错误:

Validation Failed 1: no requests added,

我已经研究过如何使用批量API正确发送数据(为每个输入添加新行),但cURL不会读取我的断行语句。我的完整命令如下:

curl -XPOST localhost:9200/customer/external/_bulk?pretty --data-binary "{ \"index\": {\"_id\": \"1\"}} \n { \"name\": \"John Doe\" } \n {\"index\": {\"_id\": \"2\"}} \n {\"name\": \"Jane Doe\" }"

此外,其他信息包括:cURL没有在Windows中读取单引号,我在jSON中转义双引号。

谢谢

1 个答案:

答案 0 :(得分:3)

您有两种解决方案:

您可以将批量查询存储在文件中。确保:

  • 双引号未转义以及
  • 每一行(也是最后一行)以换行符结尾(不是换行符\n,而是一个真正的换行符

bulk.json

{"index": {"_id": "1"}}
{"name": "John Doe" }
{"index": {"_id": "2"}}
{"name": "Jane Doe" }

然后你可以运行这个命令

curl -XPOST localhost:9200/customer/external/_bulk?pretty --data-binary @/path/to/your/file

另一个解决方案是简单地内联您拥有的相同数据,但使用-d参数而不是用于发送文件的--data-binary发送它。

curl -XPOST localhost:9200/customer/external/_bulk?pretty -d "
{\"index\": {\"_id\": \"1\"}}
{\"name\": \"John Doe\" }
{\"index\": {\"_id\": \"2\"}}
{\"name\": \"Jane Doe\" }
"

再次确保在最后一行之后包含换行符