开发者社区> 问答> 正文

canal-adapter在同步MySQL数据到ES的时候,delete的时候,如果ES的id不采用

环境信息

canal version mysql version

问题描述

canal-adapter的配置如下, es的id采用自生成的策略

dataSourceKey: defaultDS destination: example groupId: g1 esMapping: _index: index _type: user upsert: false pk: c_id sql: "select a.id as c_id, a.name as name from user a" commitBatch: 3000

mysql的数据delete的时候, 会将原来的数据的字段update为null,但是不会delete掉

public void delete(ESMapping mapping, Object pkVal, Map<String, Object> esFieldData) { if (mapping.get_id() != null) { getBulk().add(transportClient.prepareDelete(mapping.get_index(), mapping.get_type(), pkVal.toString())); commitBulk(); } else { SearchResponse response = transportClient.prepareSearch(mapping.get_index()) .setTypes(mapping.get_type()) .setQuery(QueryBuilders.termQuery(mapping.getPk(), pkVal)) .setSize(10000) .get(); for (SearchHit hit : response.getHits()) { // 这里执行的是update,而不是delete getBulk().add(transportClient.prepareUpdate(mapping.get_index(), mapping.get_type(), hit.getId()).setDoc(esFieldData)); commitBulk(); } }

}

原提问者GitHub用户

展开
收起
云上静思 2023-05-04 12:01:25 127 0
1 条回答
写回答
取消 提交回答
  • 是的,pk只会更新不会删除,删除只会通过_id删除

    原回答者GitHub用户rewerma

    2023-05-05 10:26:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像