使用CURL将JSON导入到Elasticsearch 5.1中
问题描述:
我试图将大型JSON文档导入到Elasticsearch 5.1中。数据的一小部分是这样的:使用CURL将JSON导入到Elasticsearch 5.1中
[
{
"id": 1,
"region": "ca-central-1",
"eventName": "CreateRole",
"eventTime": "2016-02-04T03:41:19.000Z",
"userName": "[email protected]"
},
{
"id": 2,
"region": "ca-central-1",
"eventName": "AddRoleToInstanceProfile",
"eventTime": "2016-02-04T03:41:19.000Z",
"userName": "[email protected]"
},
{
"id": 3,
"region": "ca-central-1",
"eventName": "CreateInstanceProfile",
"eventTime": "2016-02-04T03:41:19.000Z",
"userName": "[email protected]"
},
{
"id": 4,
"region": "ca-central-1",
"eventName": "AttachGroupPolicy",
"eventTime": "2016-02-04T01:42:36.000Z",
"userName": "[email protected]"
},
{
"id": 5,
"region": "ca-central-1",
"eventName": "AttachGroupPolicy",
"eventTime": "2016-02-04T01:39:20.000Z",
"userName": "[email protected]"
}
]
我想导入数据,而无需对源数据如果可能的任何变化,所以我认为,排除了_bulk命令,我需要为每个条目添加额外的细节。
我试过几种不同的方法,但没有任何运气。我是否浪费时间尝试按原样导入此文档?
我已经试过:
curl -XPOST 'demo.ap-southeast-2.es.amazonaws.com/rea/test' --data-binary @Records.json
但失败与错误:
{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse"}],"type":"mapper_parsing_exception","reason":"failed to parse","caused_by":{"type":"not_x_content_exception","reason":"Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes"}},"status":400}
谢谢!
答
如果您不想修改文件,则批量API将不起作用。
你可以看看jq。 这是一个命令行json解析器。它可以帮助您生成运行批量API所需的文档。
cat Records.json |
jq -c '
.[] |
{ index: { _index: "index_name", _type: "type_name" } },
. '
你可以尝试这样的事情,并将其传递给批量api。希望这可以帮助。
你也可以尝试做一个卷曲调用,这将是这样的事情。
cat Records.json |
jq -
.[] |
{ index: { _index: "index_name", _type: "type_name" } },
. ' | curl -XPOST demo.ap-southeast-2.es.amazonaws.com/_bulk --data-binary @-
还没有尝试第二部分,但应该工作。
答
您可能想查看stream2es - 这是一个将文档发送到ElasticSearch的实用工具。我认为它可以做你需要做的事情。
一旦你安装了它,你应该能够使用它是这样的:
cat Records.json | ./stream2es stdin --target 'http://demo.ap-southeast-2.es.amazonaws.com/rea/test'
+0
谢谢你的回复。我也会尝试stream2es! –
感谢您的答复。我会尝试这些选项并报告回来! –