The best elasticsearch highlevel java rest api-----
bboss
基于bboss持久层和bboss elasticsearch客户端实现数据库数据导入es案例分享(支持各种数据库和各种es版本)
1.案例对应的源码
https://gitee.com/bboss/bboss-elastic/blob/master/bboss-elasticsearch-rest-jdbc/src/test/java/org/frameworkset/elasticsearch/client/TestESJDBC.java
2.在工程中导入jdbc es maven坐标
本文从mysql数据库表td_cms_document导入数据到es中,除了导入上述maven坐标,还需要额外导入mysql驱动坐标:
3.配置es地址
新建application.properties文件,内容为:
4.编写简单的导入代码
可以直接运行上述代码,查看数据导入效果。
5.一个有字段属性映射的稍微复杂案例实现
6 开发交流
elasticsearch技术交流群:166471282
elasticsearch微信公众号:
基于bboss持久层和bboss elasticsearch客户端实现数据库数据导入es案例分享(支持各种数据库和各种es版本)
1.案例对应的源码
https://gitee.com/bboss/bboss-elastic/blob/master/bboss-elasticsearch-rest-jdbc/src/test/java/org/frameworkset/elasticsearch/client/TestESJDBC.java
2.在工程中导入jdbc es maven坐标
<dependency> <groupId>com.bbossgroups.plugins</groupId> <artifactId>bboss-elasticsearch-rest-jdbc</artifactId> <version>5.0.7.6</version> </dependency>
本文从mysql数据库表td_cms_document导入数据到es中,除了导入上述maven坐标,还需要额外导入mysql驱动坐标:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency>
3.配置es地址
新建application.properties文件,内容为:
elasticsearch.rest.hostNames=10.21.20.168:9200
## 集群地址用逗号分隔
#elasticsearch.rest.hostNames=10.180.211.27:9200,10.180.211.28:9200,10.180.211.29:9200
4.编写简单的导入代码
public void testSimpleImportBuilder(){
ImportBuilder importBuilder = ImportBuilder.newInstance();
try {
//清除测试表数据
ElasticSearchHelper.getRestClientUtil().dropIndice("dbclobdemo");
}
catch (Exception e){
}
//数据源相关配置,可选项,可以在外部启动数据源
importBuilder.setDbName("test")
.setDbDriver("com.mysql.jdbc.Driver") //数据库驱动程序,必须导入相关数据库的驱动jar包
.setDbUrl("jdbc:mysql://localhost:3306/bboss")
.setDbUser("root")
.setDbPassword("123456")
.setValidateSQL("select 1")
.setUsePool(false);//是否使用连接池
//指定导入数据的sql语句,必填项,可以设置自己的提取逻辑
importBuilder.setSql("select * from td_cms_document");
/**
* es相关配置
*/
importBuilder
.setIndex("dbclobdemo") //必填项
.setIndexType("dbclobdemo") //必填项
.setRefreshOption(null)//可选项,null表示不实时刷新,importBuilder.setRefreshOption("refresh");表示实时刷新
.setUseJavaName(true) //可选项,将数据库字段名称转换为java驼峰规范的名称,例如:doc_id -> docId
.setBatchSize(1000); //可选项,批量导入es的记录数,默认为-1,逐条处理,> 0时批量处理
/**
* 执行数据库表数据导入es操作
*/
DataStream dataStream = importBuilder.builder();
dataStream.db2es();
}
可以直接运行上述代码,查看数据导入效果。
5.一个有字段属性映射的稍微复杂案例实现
public void testImportBuilder(){
ImportBuilder importBuilder = ImportBuilder.newInstance();
try {
//清除测试表
ElasticSearchHelper.getRestClientUtil().dropIndice("dbclobdemo");
}
catch (Exception e){
}
//数据源相关配置,可选项,可以在外部启动数据源
importBuilder.setDbName("test")
.setDbDriver("com.mysql.jdbc.Driver") //数据库驱动程序,必须导入相关数据库的驱动jar包
.setDbUrl("jdbc:mysql://localhost:3306/bboss")
.setDbUser("root")
.setDbPassword("123456")
.setValidateSQL("select 1")
.setUsePool(false);//是否使用连接池
//指定导入数据的sql语句,必填项,可以设置自己的提取逻辑
importBuilder.setSql("select * from td_cms_document");
/**
* es相关配置
*/
importBuilder
.setIndex("dbclobdemo") //必填项
.setIndexType("dbclobdemo") //必填项
.setRefreshOption(null)//可选项,null表示不实时刷新,importBuilder.setRefreshOption("refresh");
.setUseJavaName(true) //可选项,将数据库字段名称转换为java驼峰规范的名称,例如:doc_id -> docId
.setEsIdField("documentId")//可选项
.setEsParentIdField(null) //可选项,如果不指定,es自动为文档产生id
.setRoutingValue(null) //可选项 importBuilder.setRoutingField(null);
.setEsDocAsUpsert(true)//可选项
.setEsRetryOnConflict(3)//可选项
.setEsReturnSource(false)//可选项
.setEsVersionField(null)//可选项
.setEsVersionType(null)//可选项
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") //可选项,默认日期格式
.setLocale("zh_CN") //可选项,默认locale
.setTimeZone("Etc/UTC") //可选项,默认时区
.setBatchSize(1000); //可选项,批量导入es的记录数,默认为-1,逐条处理,> 0时批量处理
/**
* db-es mapping 表字段名称到es 文档字段的映射:比如document_id -> docId
* 可以配置mapping,也可以不配置,默认基于java 驼峰规则进行db field-es field的映射和转换
*/
importBuilder.addFieldMapping("document_id","docId")
.addFieldMapping("docwtime","docwTime")
.addIgnoreFieldMapping("channel_id");//添加忽略字段
/**
* 执行数据库表数据导入es操作
*/
DataStream dataStream = importBuilder.builder();
dataStream.db2es();
}
6 开发交流
elasticsearch技术交流群:166471282
elasticsearch微信公众号: