在每个json文档

时间:2016-11-14 10:09:49

标签: json elasticsearch

我有一个带有1000个json对象的json文件。 有没有办法在每个json文档之前添加标题行?有最简单的方法吗?

示例:我有1000个像这样的对象

{"id":58,"first_name":"Louis","last_name":"Jordan","email":"ljordan1l@nature.com","gender":"Male","Latitude":"-15.93444","Longitude":"-50.14028"}

我想为每个json对象添加如下所示的索引标题,以便我可以在Elasticsearch Bulk api中使用

{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "unique_id" } }
{"id":58,"first_name":"Louis","last_name":"Jordan","email":"ljordan1l@nature.com","gender":"Male","Latitude":"-15.93444","Longitude":"-50.14028"}

2 个答案:

答案 0 :(得分:0)

如果您愿意使用Logstash,则无需修改文件,只需逐行阅读,并使用利用批量API的elasticsearch输出将其流式传输到ES。

将以下Logstash配置存储在名为es.conf的文件中(确保文件path和ES hosts符合您的设置):

input {
  file {
    path => "/path/to/your/json"
    sincedb_path => "/dev/null"
    start_position => "beginning"
    codec => "json"
  }
}
filter {
  mutate {
    remove_fields => ["@version", "@timestamp"]
  }
}
output {
  elasticsearch {
    hosts => "localhost:9200"
    index => "test"
    document_type => "type1"
    document_id => "%{id}"
  }
}

然后,您需要install logstash并且您将能够运行以下命令以将JSON文件加载到ES服务器:

bin/logstash -f es.conf

答案 1 :(得分:0)

我找到了在每个json文档之前添加标题行的最佳方法。 https://stackoverflow.com/a/30899000/5029432