canal 系列:ES中nested嵌套类型同步

canal 系列:ES中nested嵌套类型同步,第1张

在日常的业务开发场景中,像 一个人有多套房子,多个住址 ,一篇文章中有多个评论这种需求还是非常常见的。当我们使用 Elasticsearch 来衡慧进行存储时, ES 的字段类型是 nested 类型 ,虽然这个效率不高。

当我们使用 canal 对数据进行增量同步到 ES 时,canal-adapter 是否是支持 nested 类型呢?

查看 issue 提问

好遗憾。大佬说暂时不支持。

在本想放弃的时候,看到 issue 中有位小伙伴说,配置 object 兼容 nested ,但是并没有给出解决方案。废话不多说,实践一把,走起。

1. 数据处理

1.1 创建 存在 字段类型为 nested 的索引 canal_test

首先创建 elasticsearch的索引名为 canal_test  ,其中 addresses 字段是 nested 类型

创建 两张表 t_address(地址表),t_rk (人口表)。一个人可以有多个地址,一对多的关系

默认已经熟悉 canal 和 canal-adapter 的消败使用。在同步到 es 中,我们知道需要为每个索引配置一份 yml 的配置文件,下面咐桥答创建canal_test.yml 文件 ,同步配置如下

* 重点关注

配置中的关键

*  获取第 1 步中准备的sql,执行测试数据 sql

canal 执行日志

  3.  同步结果

4. 搜索验证 

查询结果:

好了 ,今天的实践就到这里。你学废了吗? 

这边格式有点奇怪,有需要可以到公众号看

https://mp.weixin.qq.com/s/jIVxxHp9GsE2WL2DNPsVJQ

答案是:EF6AH

理由是:页面大小为4096字节,4096等于2的12次方。故页内地址为12位。又逻辑地址长信握度为16位。滑败庆故高4位表示页号。则逻辑地址2F6AH在第2页。根据页表可知,第2页存于第14块中。14的十六进枯前制为EH,与低12位F6AH拼接得物理地址为EF6AH

你的那个参考答案确实错了啊

1)你为什么不能再困森getByMerchantId的时候把image也同时获取了呢。你现在这样做多麻码枯烦呀

2)如果一定要这样做,那么参汪模亩考以下代码

(function(watchLength){

var current=0

displays.forEach(function (display) {

imageService.getByDisplayId(display.id).then((image)=>{

display.image = image

current++

if(current===watchLength){

res.send(displays)

}

})

})

}(displays.length))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8243330.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存