利用logstash-output-jdbc从mysql导入数据到es中,如何构建多级节点的JSON

本文介绍如何使用Logstash的filter配置实现从MySQL导入数据到Elasticsearch,并构建一对一及一对多的多级JSON数据结构。对于一对一关联,通过add_field添加嵌套字段并移除原始字段;对于一对多关联,则采用aggregate插件收集多个子项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求场景:

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

 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值