2016-11-14 66 views
0

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

例如:我有1000对象这样

{"id":58,"first_name":"Louis","last_name":"Jordan","email":"[email protected]","gender":"Male","Latitude":"-15.93444","Longitude":"-50.14028"}

我想添加索引头象下面对每个JSON对象,这样我可以在Elasticsearch散装API使用

{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "unique_id" } } 
{"id":58,"first_name":"Louis","last_name":"Jordan","email":"[email protected]","gender":"Male","Latitude":"-15.93444","Longitude":"-50.14028"} 
+0

你想指定自己的ID,还是你愿意让ES自动为你生成它们? – Val

+0

无论关于ID,自动生成还是我的具体。 –

回答

0

如果你愿意利用Logstash,你不需要修改你的文件,并且可以简单地逐行阅读并使用利用批量API的elasticsearch输出将其流式传输到ES。

存储在名为es.conf文件中的下列Logstash配置(确保文件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 
+0

我如何运行此代码段? –

+0

我已经更新了我的答案 – Val

0

我发现每个JSON文件之前,添加标题行的最好方式。 https://stackoverflow.com/a/30899000/5029432

+0

很酷,但请注意,该解决方案的一个缺点是它不允许指定文档ID。 – Val

+0

@Val,当你通过BULK API导入文件时,id会自动生成。 –

+0

我知道,我只是提到了这个问题,因为那些需要指定他们自己的id的人会在这个问题上磕磕绊绊。 – Val

相关问题