绊脚石乃是进身之阶。

logstash到ES的数据更新问题

Logstash | 作者 wangjinhao | 发布于2018年09月20日 | 阅读数:6511

    问题类似这个https://stackoverflow.com/ques ... q%3D1
    我现有两个数据表。表A有三个字段(aid, aname, fid),其中aid为主键,fid为外键,fid关联表B的主键;表B有三个字段(fid, fname, fage)。我要在ES中实现A、B表数据的综合查询,因此我建立了如下两个索引
PUT index_a
{
"mappings": {
"doc" : {
"properties": {
"aid" : { "type" : "keyword" },
"aname" : { "type" : "keyword" },
"fid" : { "type" : "keyword" },
"fname" : { "type" : "keyword" },
"fage" : { "type" : "integer"}
}
}
}
}

PUT index_b
{
"mappings": {
"doc" : {
"properties": {
"fid" : { "type" : "keyword" },
"fname" : { "type" : "keyword" },
"fage" : { "type" : "integer"}
}
}
}
}
    index_a中包含了A、B表的数据,index_b中包含了B表的数据,我现在想要通过logstash实现mysql的A、B表的数据同步更新到这两个索引,其中index_b的更新较为简单。但是当B表数据发生变化时不仅要更新index_b,还要更新index_a,比如fid为1的数据中fname发生改变,那么要更新index_a中所有的fid为1的文档的fname,请问这个功能怎么在logstash中实现,即一次性更新多条文档,并且只更新fname
已邀请:

rochy - rochy_he

赞同来自:

推荐每个表添加更新时间字段,然后将 A 表和 B 表的关联关系,建立一个试图;
试图的更新时间字段取 A 表和 B 表更新字段的最大值(重要);
然后在 logstash 里面根据更新时间来进行同步即可

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

ES中对多表关联支持的不好,建议:同步前做处理,同意楼上。
先创建视图,建立多表关联,
然后,将视图同步到对应的ESindex中。
 

要回复问题请先登录注册