datax从mysql同步数据到elasticsearch(使用es的动态模板)

elasticsearch中设置动态模板

PUT _template/hkey_transferbill
{ 
  "order":0 //order表示模板的优先级,值越大优先级越高,索引如果匹配了多个模板,则会根据优先级从低到高依次使用模板,高优先级会覆盖低优先级
  "index_patterns": "*", //模板可以匹配的索引,可以使用通配符
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 1
  },
  "mappings": {
    "data":{
      "dynamic_templates" : [ {  
        "keyword_field" : {  
          "unmatch" : "*Name",  
          "match_mapping_type" : "string",  
          "mapping" : {  
            "type" : "keyword"
          }  
        }  
      }, {  
        "text_fields" : {  
          "match" : "*Name",  
          "match_mapping_type" : "string",  
          "mapping" : {  
            "type" : "text",
            "fields": {
              "raw": {
                "type": "keyword"
              }
            }
          }  
        }  
      } ],  
      "properties": {
        "rowkey":
        {
          "type":"keyword"
        },
        "age":
        {
          "type":"keyword"
        }
      }
    }
  }
}

datax同步脚本 

{
  "job": {
    "setting": {
          "speed": {
            "byte": 8388608,
            "channel": 3
          },
          "errorLimit": {
            "record": 0,
            "percentage": 0.02
          }
        },
    "content": [
      {
        "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "xxx",
                        "password": "xxx",
                        "connection": [
                    {
                      "querySql": [
                                    "select id,province,city,area,longitude,latitude,concat_ws(\",\",latitude,longitude) location from geotable"
                                ],
                        "jdbcUrl": [ "jdbc:mysql://xxx:3306/xxx" ]
                    }
                ]
                    }                   
                },
        "writer": {
          "name": "elasticsearchwriter",
          "parameter": {
            "endpoint": "http://xxx:9200",
            "index": "myindex",
            "type": "data",
            "cleanup": true, #true表示插入前清空,即覆盖同步;false则追加同步
            "dynamic": true,  #这里一定要指定为true,否则使用的是datax的模板(就是下面定义的字段类型),而不会使用es的模板
            "settings": {"index" :{"number_of_shards": 2, "number_of_replicas": 1}},            
            "batchSize": 10000,
            "splitter": ",",
            "column": [
              {"name": "pk", "type": "id"},#指定第一个字段为rowkey 
              {"name": "id","type":"text"},#因为dynamic的值为true,表示使用es的动态模板,因此这里的type实际上是不起作用的
              {"name": "province", "type": "text"},
              { "name": "city", "type": "text"},
              { "name": "area", "type": "text"},
              { "name": "longitude","type":"double" },
              { "name": "latitude","type": "double" },
              { "name": "location","type": "geo_point" }                   
            ]
          }
        }
      }
    ]
  }
}

注意:writer中的column元素顺序要和reader中读取的元素顺序一致

MySQL 是一种常用的关系型数据库,而 Elasticsearch 是一种为搜索和分析而设计的分布式全文搜索引擎。当需要将 MySQL 中的数据同步Elasticsearch 中时,我们需要考虑以下几个选型方案。 1. 使用开源工具:有一些开源工具可以帮助我们实现 MySQLElasticsearch同步,如Logstash、Debezium等。这些工具可以通过配置文件和插件的方式来实现数据同步和转换。它们具有较好的可扩展性和灵活性,但配置和维护相对较复杂。 2. 自行开发同步程序:如果有足够的开发资源和技术能力,可以自行开发同步程序。通过连接 MySQL数据源,监控和捕获数据库变更事件,并将变更数据转换为 Elasticsearch 的文档格式进行索引。这种方式可以更加灵活地根据业务需求进行定制化开发,但需要自行处理一些细节问题,如数据一致性和性能优化等。 3. 第三方商业工具:市面上也有一些商业工具可以实现 MySQLElasticsearch同步,如阿里云的DataX、Talend等。这些工具提供了相对成熟和稳定的解决方案,并且有一定的技术支持。它们通常提供了更多的功能和易用性,但需要根据具体的需求和预算来选择合适的工具。 在选择合适的方案时,需要考虑以下几个因素: 1. 数据同步的实时性:根据业务需求确定数据同步的实时性要求,选择相应的工具或方案。 2. 数据量和性能要求:考虑数据量的大小和性能要求,选型时需进行性能测试和评估,选择性能较好的工具。 3. 维护和运维成本:考虑工具的配置和维护的复杂度以及对运维资源的需求,选择适合的选型方案,以降低维护和运维成本。 4. 其他需求:如数据的安全性、数据格式的转换、过滤条件的处理等,根据项目的具体需求选择适合的选型方案。 综上所述,MySQL 同步Elasticsearch 的选型需要根据具体的需求和条件来选择合适的方案,权衡各个因素,在实践中找到最适合的解决方案。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值