需求场景:
1: 利用logstash-output-jdbc从mysql导入数据到es(elasticsearch版本5.4.1)中,如何构建构建一对一多级节点的JSON. 如产品表,需要关联产品品牌,产品供应商。
解决方法:
filter {
if [type] == "product"{
mutate {
add_field => {
"[provider][id]" => "%{provider_id}"
"[provider][code]" => "%{provider_code}"
"[provider][name]" => "%{provider_name}"
}
add_field => {
"[brand][id]" => "%{brand_id}"
"[brand][name]" => "%{brand_name}"
}
remove_field => [ "provider_id", "provider_code","provider_name"]
remove_field => [ "brand_id","brand_name"]
}
}
}
2: 构建一对多级节点的JSON. 如产品品牌,对应多个产品。
解决方法:
filter {if [type] == "product1"{
aggregate {
task_id => "%{brand_id}"
code => "
map[' brandId'] = event.get(' brand_id') #品牌ID
map[' brandName'] = event.get('brand_name') #品牌名称
map['products'] ||= []
map[' products'] << {
'id' => event.get('id'),
'code' => event.get('code'), #产品编码
' name' => event.get('name'),#产品名称
}
event.cancel()
"
push_previous_map_as_event => true
}
}
}