开发者社区> bboss> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

数据库数据导入Elasticsearch案例分享

简介: The best elasticsearch highlevel java rest api-----bboss 基于bboss持久层和bboss elasticsearch客户端实现数据库数据导入es案例分享(支持各种数据库和各种es版本) 1.
+关注继续查看
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坐标
<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微信公众号:
img_a21db47cf20ac4820026d60bcb2b9470.jpe

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
不能不学!从零到一搭建ELK日志,在Docker环境下部署 Elasticsearch 数据库
最近在玩 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。
42 0
博客数据库要连接Elasticsearch,使用MySQL还是MongoDB更合理
博客数据库要连接Elasticsearch,使用MySQL还是MongoDB更合理
97 0
【ElasticSearch】在项目中如何使用ElasticSearch跟数据库同步数据
【ElasticSearch】在项目中如何使用ElasticSearch跟数据库同步数据
318 0
【愚公系列】2021年11月 Elasticsearch数据库-Window11下的安装
【愚公系列】2021年11月 Elasticsearch数据库-Window11下的安装
64 0
【愚公系列】2021年11月 Elasticsearch数据库-面试题
【愚公系列】2021年11月 Elasticsearch数据库-面试题
147 0
探究 | Elasticsearch 与传统数据库界限
现在几乎网上所有资料都说数据存储在传统数据库,再在 es 中同步一份数据作为检索使用,但是也都没有很详细的说明为什么要这么做,而且在 es 本身可以存储数据的情况下,存储两份数据是不是没有必要?还会引起别的问题。 虽然收费而且支持的语法不完全,但是在现在 es 已经支持 sql 的情况下,我越来越搞不清楚 es 和数据库之间的界限。 es 不支持事务但是能够确保单条数据的写入,这样事务可以通过代码实现。很难进行联合查询可以像其他 nosql 一样用宽表实现。实时性可以通过配置调整,而在扩展性能和复杂统计上肯定 es 更优。 基于以上疑问,请问现阶段 es 与数据库的区别或者说界限到底在哪
103 0
Elasticsearch 既是搜索引擎又是数据库?真的有那么全能吗?
经常遇到很多朋友询问,如何学好 Elasticsearch?这个问题本质上很不好回答,但我一直又很想好好回答,所以本文就以我个人的经验视角,跟大家探讨一下如何正确的拥抱 Elasticsearch。
8960 0
【最佳实践】这样运用阿里云Elasticsearch,让你的数据库马上拥有强大的数据分析和搜索能力。
阿里云Elasticsearch拥有强大的搜索分析能力,最快可达5分钟/次。如何让你的阿里云云存储、云数据库产品拥有数据分析和搜索能力?那么这篇文章将会给你答案。
3790 0
【技术实验】Elasticsearch 做数据库系列之一:表结构定义
Elaticsearch 有非常好的查询性能和查询语法,在一定场景下可以替代RDBMS做为OLAP。《Elasticsearch 做数据库系列》系列文章通过类比SQL的概念,实验并学习Elasticsearch聚合DSL的语法和语义,并用 python 实现一个翻译器,能够使用 SQL 来完成 Elasticsearch 聚合DSL一样的功能。
7568 0
Centos 7 下安装kibana,ik中文分词器以及ElasticSearch集群教程(二)
Centos 7 下安装kibana,ik中文分词器以及ElasticSearch集群教程
41 0
+关注
bboss
热衷开源,主要开源作品:开源框架bboss,bboss session,bboss 序列化等 bboss特色:http://yin-bp.iteye.com/blog/1080824
文章
问答
文章排行榜
最热
最新
相关电子书
更多
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载
低代码开发师(初级)实战教程
立即下载