canaladapter 同步mysql(一对多关系)到es,es 添加逗号分词查询

这篇具有很好参考价值的文章主要介绍了canaladapter 同步mysql(一对多关系)到es,es 添加逗号分词查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mysql 一对多关系同步到es,刚好es需要的是一个字段对应逗号分割的值。这样就解决了mysql多表关联查询很慢的弊端。但是es中给如何把逗号分割的字符串做为查询条件呢,答案如下:先看一个简单的例子:

添加一个逗号分词

PUT info-flow-test4
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_anal": {
          "type": "pattern",
          "pattern": ","
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "id": {
        "type": "keyword"
      },
      "content_id": {
        "type": "long"
      },
      "content_type": {
        "type": "integer"
      },
      "tags": {
        "type": "text",
        "analyzer": "my_anal"
      }
    }
  }
}
添加一个文档
POST /info-flow-test4/_doc
{
  "tags": "1,2,33"
}

POST /info-flow-test4/_search
{
  "query": {
    "match": {
      "tags": "2"
    }
  }
}
返回结果:
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "info-flow-test4",
        "_type" : "_doc",
        "_id" : "MUFNDX8BciPKIrWg9Qc6",
        "_score" : 0.2876821,
        "_source" : {
          "tags" : "1,2,33"
        }
      }
    ]
  }
}

canaladapter 同步mysql(一对多关系)到es,es 添加逗号分词查询,canal,elasticsearch,大数据,搜索引擎

 

以上就是逗号分割的字段如何在es中检索出来。

项目中实战:通过canaladapter 同步一对多的关系到es, canaladapter配置文件如下:

dataSourceKey: defaultDS
destination: canalserver
outerAdapterKey: essync
groupId: g1
esMapping:
  _index: wx_cp_user_contact_rel_all
  _id: id
  #  upsert: true
  #  pk: id
  sql: "select
                	CONCAT(a.corp_id, '_', a.follow_user_id, '_', a.external_userid) as id,
                	a.external_userid,
                	a.follow_user_id,
                	a.follow_user_remark,
                	a.follow_user_description ,
                	date_format( a.follow_user_createtime, '%Y-%m-%d %H:%I:%S') as follow_user_createtime,
                	a.follow_user_tags_group_name,
                	a.follow_user_tags_tag_name ,
                	a.follow_user_tags_type ,
                	a.follow_user_remark_corp_name ,
                	a.address,
                	a.corp_id ,
                	a.follow_user_remark_mobiles ,
                	a.follow_user_state ,
                	a.status ,
                	a. birthday,
                	date_format( a.link_time, '%Y-%m-%d %H:%I:%S') as link_time,
                	date_format( a.create_time, '%Y-%m-%d %H:%I:%S') as create_time,
                	a.follow_user_add_way,
                	b.name,
                	b.avatar,
                	b.type,
                	b.gender,
                	b.unionid,
                	b.position,
                	b.corp_name ,
                	b.corp_full_name,
                	b.external_profile,
                	b.phone,
                	d.broadband_umber,
                	e.mobile,
                	f.tags
                from
                	wx_cp_user_contact_rel a
                left join wx_cp_user_contact b on	a.external_userid = b.external_userid	and a.corp_id = b.corp_id
                left join wx_cp_user_contact_ext_rel d on a.external_userid = d.external_userid	and a.follow_user_id = d.user_id and a.corp_id = d.corp_id
                left join wx_cp_user e on  e.user_id = a.follow_user_id and e.corp_id = a.corp_id
                left join (select ec_user_id ,user_id , GROUP_CONCAT(tag_id) as tags,corp_id from wx_cp_user_contact_tag_rel  group by ec_user_id,user_id,corp_id) f on   a.external_userid = f.ec_user_id	and a.follow_user_id = f.user_id and a.corp_id = f.corp_id
"
  #  objFields:
  #    _labels: array:;
  etlCondition: "where a.corp_id ={}"
  commitBatch: 3000

es索引建立:

PUT wx_cp_user_contact_rel_all/
 {
    "settings": {
    "analysis": {
      "analyzer": {
        "my_anal": {
          "type": "pattern",
          "pattern": ","
        }
      }
    }
  },
    "mappings" : {
      "properties" : {
        "address" : {
          "type" : "text",
          "analyzer" : "ik_max_word"
        },
        "avatar" : {
          "type" : "keyword"
        },
        "birthday" : {
          "type" : "date",
          "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.S||strict_date_optional_time||epoch_millis"
        },
        "broadband_umber" : {
          "type" : "keyword"
        },
        "corp_full_name" : {
          "type" : "text",
          "analyzer" : "ik_max_word"
        },
        "corp_id" : {
          "type" : "keyword"
        },
        "corp_name" : {
          "type" : "text",
          "analyzer" : "ik_max_word"
        },
        "create_time" : {
          "type" : "date",
          "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.S||strict_date_optional_time||epoch_millis"
        },
        "develop_phone" : {
          "type" : "keyword"
        },
        "external_profile" : {
          "type" : "text",
          "analyzer" : "ik_max_word"
        },
        "external_userid" : {
          "type" : "keyword"
        },
        "follow_user_add_way" : {
          "type" : "keyword"
        },
        "follow_user_createtime" : {
          "type" : "date",
          "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.S||strict_date_optional_time||epoch_millis"
        },
        "follow_user_description" : {
          "type" : "text",
          "analyzer" : "ik_max_word"
        },
        "follow_user_id" : {
          "type" : "keyword"
        },
        "follow_user_remark" : {
          "type" : "text",
          "analyzer" : "ik_max_word"
        },
        "follow_user_remark_corp_name" : {
          "type" : "text",
          "analyzer" : "ik_max_word"
        },
        "follow_user_remark_iop_mobiles" : {
          "type" : "keyword"
        },
        "follow_user_remark_mobiles" : {
          "type" : "keyword"
        },
        "follow_user_state" : {
          "type" : "keyword"
        },
        "follow_user_tags_group_name" : {
          "type" : "keyword"
        },
        "follow_user_tags_tag_name" : {
          "type" : "keyword"
        },
        "follow_user_tags_type" : {
          "type" : "keyword"
        },
        "gender" : {
          "type" : "integer"
        },
        "is_has_tag" : {
          "type" : "integer"
        },
        "job_number" : {
          "type" : "keyword"
        },
        "link_time" : {
          "type" : "date",
          "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.S||strict_date_optional_time||epoch_millis"
        },
        "mobile_update_time" : {
          "type" : "date",
          "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.S||strict_date_optional_time||epoch_millis"
        },
        "name" : {
          "type" : "keyword"
        },
        "phone" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "position" : {
          "type" : "keyword"
        },
        "status" : {
          "type" : "short"
        },
        "type" : {
          "type" : "integer"
        },
        "unionid" : {
          "type" : "keyword"
        },
        "unionid_mobile" : {
          "type" : "keyword"
        },
        "update_time" : {
          "type" : "date",
          "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.S||strict_date_optional_time||epoch_millis"
        },
        "user_code" : {
          "type" : "keyword"
        },
         "mobile" : {
          "type" : "keyword"
        },
         "tags": {
        "type": "text",
        "analyzer": "my_anal"
      }
      }
    }
  }

项目中 员工给客户大的标签,是一对多的关系,但是为了在es中能对标签做完检索条件。不得已才有此方案,重点关注上次 tags 字段(完结)文章来源地址https://www.toymoban.com/news/detail-587505.html

到了这里,关于canaladapter 同步mysql(一对多关系)到es,es 添加逗号分词查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch实战(二十二)---ES数据建模与Mysql对比 一对一模型

    我们如何把Mysql的模型合理的在ES中去实现? 就需要你对要存储的数据足够的了解,及对应用场景足够的深入分析,才能建立一个合适的模型,便于你后期扩展 实体之间的关系: 一对一 模型 一对一(1:1):一个实体最多只能能另一个实体相关联,另一个实体如是。 例:一个只能

    2024年02月10日
    浏览(58)
  • es elasticsearch 十 中文分词器ik分词器 Mysql 热更新词库

    目录 中文分词器ik分词器 介绍 安装 使用分词器 Ik分词器配置文件 Mysql 热更新词库 介绍 中文分词器按照中文进行分词,中文应用最广泛的是ik分词器 安装 官网下载对应版本zip 下载  放到  plugins 目录 新建 ik文件夹 考入解析zip 重启 es //分成小单词 使用分词器 ik_max_word分成

    2024年02月07日
    浏览(60)
  • 如何玩mysql5.7实现分词查询,来实现类似ES的效果

    背景:在做海外主数据项目的时候,PM提出了一个需求,说是类似于搜索的功能。但是需要实现根据输入的字符串进行相似度的查询,并且计算出输入的字符串与查出的字符串的相似度是多少。 思考:第一次听到需求的时候感觉还挺简单的,以为不就是个迷糊查询吗?但仔细

    2024年02月01日
    浏览(40)
  • Mysql和ES、Redis数据同步方案汇总_redis同步数据从mysql到es

    文章目录 前言 一、数据同步方案 1.同步双写 [2.异步双写(MQ方式)](#2MQhttpssocsdnnetsosearchqMQspm1001210130017020_53) 3.基于Mysql表定时扫描同步 [4.基于Binlog实时同步](#4BinloghttpssocsdnnetsosearchqBinlogspm1001210130017020_119) [二、数据迁移同步工具选型](#httpssocsdnnetsosearchqspm1001210130017020_141) 总结

    2024年04月23日
    浏览(36)
  • MyBatis 的关联关系配置 一对多,一对一,多对多 关系的映射处理

    目录 一.关联关系配置的好处  二. 导入数据库表:  三.    一对多关系:--    一个订单对应多个订单项        四.一对一关系:---一个订单项对应一个订单 五.多对多关系(两个一对多)          MyBatis是一个Java持久化框架,可以 通过XML或注解的方式 将对象与数据库

    2024年02月11日
    浏览(64)
  • MySQL同步ES方案

    在项目开发中,我们经常将 MySQL 作为业务数据库,ES 作为查询数据库,用来实现读写分离,缓解 MySQL 数据库的查询压力,应对海量数据的复杂查询。 这其中有一个很重要的问题,就是如何实现 MySQL 数据库和 ES 的数据同步,今天和大家聊聊 MySQL 和 ES 数据同步的各种方案。

    2024年04月11日
    浏览(44)
  • 4种 MySQL 同步 ES 方案

    数据同步是一个很常见的业务场景。本文会讲述数据同步的 4 种方案,并给出常用数据迁移工具,干货满满! 在实际项目开发中,我们经常将 MySQL 作为业务数据库,ES 作为查询数据库,用来实现读写分离,缓解 MySQL 数据库的查询压力,应对海量数据的复杂查询。 这其中有一

    2024年02月08日
    浏览(36)
  • Datax同步MySQL到ES

    建表语句 插入数据 建立索引语句 我这里使用Kibana工具连接ES进行操作的,也可以使用Postman进行操作 Kibana操作语句 Postman操作语句 地址输入 Json文本输入 当出现以下信息代表创建索引成功 参数介绍 reader:datax的source(来源)端 reader.cloumn::读取mysql的字段名 reader.connection.jdbcU

    2024年02月13日
    浏览(34)
  • logstash同步mysql数据到es(三、es模板问题)

     相关问题汇总: logstash同步mysql数据到es(一、es模板问题,请求返回400) logstash同步mysql数据到es(二、jdbc_driver_library问题)_(please check user and group permissions for the p-CSDN博客 logstash同步mysql数据到es(三、es模板问题)-CSDN博客 使用docker实现logstash同步mysql到es-CSDN博客 [INFO ] 2023-12-11 09

    2024年01月17日
    浏览(79)
  • ELK增量同步数据【MySql->ES】

            1.  linux,已经搭建好的logstash+es+kibana【系列版本7.0X】,es 的plugs中安装ik分词器 ES版本:  Logstash版本:  (以上部署,都是运维同事搞的,我不会部署,同事给力) 1、在Logstash安装目录下【/usr/share/logstash】,新建XX.sh,内容如下: 2. 在Logstash安装目录下【/usr/shar

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包