弹性搜索批量从JSON导入,无ID

时间:2016-06-28 10:45:45

标签: json elasticsearch import bulk

有没有办法将数据从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"}}。 任何帮助将非常感谢!!

2 个答案:

答案 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
 }
}

然后使用

启动logstash
bin/logstash -f logstash.conf

答案 1 :(得分:0)

另一种选择,也许是因为你没有过滤数据而更容易的选择是使用filebeat。最新的filebeat-5.0.0-alpha3有JSON托运人。 Here是一个示例

相关问题