当前位置: 首页 > 后端技术 > Node.js

可定制的elasticsearch数据导入工具:mysql_2_elasticsearch

时间:2023-04-03 11:50:27 Node.js

最近在导入es库时遇到了一些麻烦。于是做了一个小工具(在npm中用过一些jdbc库引导工具,但是感觉不太好用),这里介绍的很好,推荐一下自己。欢迎兄弟姐妹们投诉参与。我会不时更新此扩展程序。从mysql到elasticsearch的可定制导入器。可定制的elasticsearch数据导入工具——基于elasticsearch的JSAPI主要功能是完全使用JS实现从MySQL到elasticsearch的数据迁移;可以批量导入多个MySQL表;可定制的数据迁移规则(数据表/字段关系、字段过滤、使用正则规则的异常处理);可自定义异步分片导入方式,数据导入更高效。一键安装npminstallmysql_2_elasticsearch快速入门(简单用例)varesMysqlRiver=require('mysql_2_elasticsearch');varriver_config={mysql:{host:'127.0.0.1',user:'root',password:'root',database:'users',port:3306},elasticsearch:{host_config:{//es客户端配置参数host:'localhost:9200',//log:'trace'},index:'myIndex'},riverMap:{'users=>users':{}//将数据表users导入esType:/myIndex/users}};/***以下代码内容:**通过esMysqlRiver方法进行数据传输,方法的回调参数(一个JSON对象)obj包含本次数据传输的结果**其中:**1.obj.total=>需要传输的数据表数**2.obj.success=>传输成功的数据表数**3.obj.failed=>传输成功的数据表数传输失败**4.obj.result=>本次数据传输结束*/esMysqlRiver(river_config,function(obj){/*将传输结果打印到终端*/console.log('\n------------------------------');console.log('传输总量:'+obj.total+'items');console.log('成功:'+obj.success+'items');console.log('失败:'+obj.failed+'items');如果(obj.result=='成功'){缺点ole.log('\n结论:所有数据传输完成!');}else{console.log('\n结论:传输不成功...');}console.log('--------------------------------');/*打印传输结果到终端*/});bestpractice(fullusecase)varesMysqlRiver=require('mysql_2_elasticsearch');/***mysql_2_elasticsearch相关参数配置(详见注释)*/varriver_config={/*[required]MySQL数据库相关参数(根据修改)实际情况)*/mysql:{host:'127.0.0.1',user:'root',password:'root',database:'users',port:3306},/*[必填]es相关参数(根据需要修改以实际情况为准)*/elasticsearch:{host_config:{//【必填】host_config为es客户端的配置参数。详细配置参考es官方文档。host:'localhost:9200',log:'trace',//Otheroptions...},index:'myIndex',//[required]esindexnamechunkSize:8000,//[notrequired]最大数量ofdatainasingleslice,defaultis5000(piecesofdata)timeout:'2m'//【不需要】单片split请求的超时时间,默认为1m//(注:这个超时不是es客户端请求的超时,请在host_config中设置后者)},/*[Required]数据传输规则*/riverMap:{'users=>users':{//[required]'a=>b'意味着mysql将数据库中名为'a'的表的所有数据发送到es中名为'b'的类型到filter_out:[//【不需要】需要过滤的字段名,即所有的filter_out中设置的字段不会会导入到elasticsearch数据中'password','age'],exception_handler:{//【非必须】异常处理器,使用JS正则表达式处理异常数据,避免非法类型导致数据丢失whenesisstored'birthday':[//【例子】处理users表birthday字段数据异常{match:/NaN/gi,//【例子】正则条件(本例匹配字段值的情况is"NaN")writeAs:null//[示例]将"NaN"重写为null},{match:/(\d{4})year/gi,//[示例]正则表达式(在本示例中,匹配字段值的形式为"2016"case)writeAs:'$1.1'//【示例】将"2015"样式数据改写为"2016.1"样式数据}]}},//其他字段的选项...}};/***将转账结果打印到终端*/esMysqlRiver(river_config,function(obj){console.log('\n-------------------------------');console.log('总转移数:'+obj.total+'items');console.log('成功:'+obj.success+'items');console.log('失败:'+obj.failed+'项目');if(obj.result=='success'){console.log('\n结论:所有数据传输完成!');}else{console.log('\n结论:传输未完成成功...');}console.log('--------------------------------');});注意事项及参考请在导入elasticsearch数据前配置好数据映射;host_config更多参数设置见es官方API文档;mysql表的自增id自动替换为表名+_id的格式,如:users_id;如遇数据丢失,请查看elasticsearch终端进程或日志,找出未导入成功的数据,通过设置exception_handler参数处理github项目地址https://github.com/parksben/m...

最新推荐
猜你喜欢