我有大量(〜40000)嵌套的JSON对象,我想将它们插入elasticsearch中。
JSON对象的结构如下:
{ "customerid": "10932" "date": "16.08.2006", "bez": "xyz", "birthdate": "21.05.1990", "clientid": "2", "address": [ { "addressid": "1", "tile": "Mr", "street": "main str", "valid_to": "21.05.1990", "valid_from": "21.05.1990", }, { "addressid": "2", "title": "Mr", "street": "melrose place", "valid_to": "21.05.1990", "valid_from": "21.05.1990", } ] }
因此,JSON字段(此示例中为地址)可以具有JSON对象数组。
Logstash配置看起来像什么将这样的JSON文件/对象导入elasticsearch?该索引的elasticsearch映射应该看起来像JSON的结构。elasticsearch文档ID应设置为customerid。
customerid
input { stdin { id => "JSON_TEST" } } filter { json{ source => "customerid" .... .... } } output { stdout{} elasticsearch { hosts => "https://localhost:9200/" index => "customers" document_id => "%{customerid}" } }
如果您可以控制生成的内容,那么最简单的方法是将输入格式设置为单行json,然后使用json_lines编解码器。
json_lines
只需将您更改stdin为:
stdin
stdin { codec => "json_lines" }
然后就可以了:
cat input_file.json | logstash -f json_input.conf
其中input_file.json具有以下行:
{"customerid":1,"nested": {"json":"here"}} {"customerid":2,"nested": {"json":"there"}}
然后您将不需要json过滤器。
json