最近,MySQL与ES的数据同步涉及父亲和儿子表的数据同步,此特此记录在此供后续参考
有关MySQL同步的操作详细信息,您可以参考我以前的博客:弹性实际战斗:实现MySQL8.0数据增加/全量同步到Elasticsearch7.x通过运河1.1.5
相关配置实际上在官方文档中包含示例。以下也基于这些示例。
此方法针对数组中的数据作为基本类型,例如列表,列表等。
SQL支持多表面相关的自由组合,但是有某些限制:
1.主表无法查询孩子的语句
2.您只能使用左外连接,也就是说,最左的表必须是主表
3.从桌子上进行校正,如果有孩子查询,则无法有多个表格
4.在主SQL中无法进行查询(可以从表查询中可用,但不建议进行该条件,这可能会导致数据同步不一致,例如在任何条件下修改字段内容)
5.相关条件仅允许“ ='主外部钥匙的操作”具有其他恒定判断,例如:on a.role_id = b.id and b.statues = 1
6.相关条件必须具有出现在主要查询语句中的字段,例如:on a.role_id = b.id。
7.弹性搜索的映射属性将对应于SQL的查询值(不支持SELECT *),例如:SELECT A.ID为_id,a.name,A.Email,A.Email as _Email as _ email as _ email,其中名称将映射到esmapping的eSmapping's提交的名称,_Email将映射到绘制映射的_Email,以别名(如果您有别名)作为最终映射字段。这里的_id可以填写配置文件_id:_id映射
ES映射(某些字段已被排除在外)
1. SQL与左联接的子计数数据相关
2.将配置添加到适配器配置文件
整体运河适配器/conf/es7中的配置文件:comment.yml
3.启动适配器
4.修改相应数据库表中的数据,然后查看日志
我发现已经有更新的数据5.查看ES中的数据
发现标签中的数据已同时更新,并且是数组形式。修改子计数据后,它也将同时更新
将配置文件中的_id映射调整为_id。请注意,SQL中的别名必须为_id。
SQL
此方法针对数组中的自定义对象的数据。例如
对于这种类型的同步,该官员没有明确的示例描述,但是观察官方文件会发现官员提供对象 - 型字段的同步
尽管这种类型的官方描述更针对一个-to -to -One JSON类型字符串,但您可能希望尝试查看是否可以支持JSON类型数组
运河中的对象是已识别的JSON类型字符串,因此我们的想法是将子表数据转换为JSON字符串,然后通过对象将其转换为JSON字符串
1. ES映射
2. SQL
3.适配器配置文件
4.整体配置文件
5.启动适配器
6.修改相应数据库表中的数据,然后检查日志,您会发现日志中的数据输出
7.查询索引数据,请注意,由于它是NSSested结构,请使用嵌套查询
您会发现刚刚修改的信息已更新
此错误是由JSON标识中缺乏必要符号引起的,因为我们上述方法是将对象类型数组转换为JSON数组。JSON数组需要是符号。
SO称为JOIN类型是指ES中的JOIN数据类型。这种类型适合以下条件。1.来自父和儿子的结构的数据2.减法数据明显超过父表数据
连接类型不能像关系数据库中的表连接一样使用。无论是has_child还是has_parent查询,它都会对索引的查询性能产生严重的负面影响,并会触发全球序列。因此,父亲和儿子的结构不能使用JOIN类型。首先考虑上述两种方法,然后在亚表图数据远远超过父表数据时考虑它。
(由于暂时没有应用程序要求,因此根据官方文档给出以下配置描述,并将在将来不断更新。)1。ES映射
2.适配器/es7/customer.yml
3.适配器/ES7/order.yml配置文件
4.开始服务