有没有办法将数据从JSON文件导入到elasticSearch而不必为每个文档提供ID?
我在JSON文件中有一些数据。它包含大约1000个文档,但没有为任何文档指定ID。以下是数据的样子:
{"business_id": "aasd231as", "full_address": "202 McClure 15034", "hours":{}}
{"business_id": "123123444", "full_address": "1322 lure 34", "hours": {}}
{"business_id": "sd231as", "full_address": "2 McCl 5034", "hours": {}}
在任何文档之前没有{"index":{"_id":"5"}}
。
现在我尝试使用以下命令将数据导入elasticsearch:
curl -XPOST localhost:9200/newindex/newtype/_bulk?pretty --data-binary @path/file.json
但它会引发以下错误:
"type" : "illegal_argument_exception",
"reason" : "Malformed action/metadata line [1], expected START_OBJECT or END_OBJECT but found [VALUE_STRING]"
这是因为在每个文档之前缺少ID。
有没有办法导入数据而不在每个文档之前提供{"index":{"_id":"5"}}
。
任何帮助将非常感谢!!
答案 0 :(得分:0)
如何使用非常适合此任务的Logstash。只需使用以下配置文件即可:
在logstash.conf
中保存以下配置:
input {
file {
path => "/path/to/file.json"
start_position => "beginning"
sincedb_path => "/dev/null"
codec => "json"
}
}
filter {
mutate {
remove_field => [ "@version", "@timestamp", "path", "host" ]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "newindex"
document_type => "newtype"
workers => 1
}
}
然后使用
启动logstashbin/logstash -f logstash.conf
答案 1 :(得分:0)
另一种选择,也许是因为你没有过滤数据而更容易的选择是使用filebeat。最新的filebeat-5.0.0-alpha3有JSON托运人。 Here是一个示例