The best elasticsearch highlevel java rest api-----bboss
Elasticsearch 6.3以后的版本可以通过jdbc操作es,该功能还在不断的完善当中,本文介绍es jdbc使用方法。
1.首先在工程中导入es jdbc maven坐标:
导入elasticsearch jdbc驱动和bboss持久层
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>jdbc</artifactId>
<version>6.3.2</version>
</dependency>
<dependency>
<groupId>com.bbossgroups</groupId>
<artifactId>bboss-persistent</artifactId>
<version>5.0.7.7</version>
</dependency>
在pom中添加elastic maven库
<repositories>
<repository>
<id>elastic.co</id>
<url>https://artifacts.elastic.co/maven</url>
</repository>
</repositories>
2.通过jdbc驱动执行elasticsearch sql相关功能
启动es数据源
执行elasticsearch sql相关功能
直接看执行各种sql功能的代码ESJdbcTest:
package com.frameworkset.sqlexecutor;
/*
* Copyright 2008 biaoping.yin
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.frameworkset.common.poolman.SQLExecutor;
import com.frameworkset.common.poolman.util.SQLUtil;
import org.junit.Test;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
public class ESJdbcTest {
public void initDBSource(){
SQLUtil.startPool("es",//ES数据源名称
"org.elasticsearch.xpack.sql.jdbc.jdbc.JdbcDriver",//ES jdbc驱动
"jdbc:es://http://127.0.0.1:9200/timezone=UTC&page.size=250",//es链接串
"elastic","changeme",//es x-pack账号和口令
"SHOW tables 'dbclob%'" //数据源连接校验sql
);
}
/**
* 执行一个查询
* @throws SQLException
*/
@Test
public void testSelect() throws SQLException {
initDBSource();//启动数据源
//执行查询,将结果映射为HashMap集合
List<HashMap> data = SQLExecutor.queryListWithDBName(HashMap.class,"es","SELECT SCORE() as score,content as content FROM dbclobdemo");
System.out.println(data);
}
/**
* 进行模糊搜索,Elasticsearch 的搜索能力大家都知道,强!在 SQL 里面,可以用 match 关键字来写,如下:
* @throws SQLException
*/
@Test
public void testMatchQuery() throws SQLException {
initDBSource();
List<HashMap> data = SQLExecutor.queryListWithDBName(HashMap.class,"es","SELECT SCORE(), * FROM dbclobdemo WHERE match(content, '_ewebeditor_pa_src') ORDER BY documentId DESC");
System.out.println(data);
/**
*还能试试 SELECT 里面的一些其他操作,如过滤,别名,如下:
*/
data = SQLExecutor.queryListWithDBName(HashMap.class,"es","SELECT SCORE() as score,title as myname FROM dbclobdemo as mytable WHERE match(content, '_ewebeditor_pa_src') and (title.keyword = 'adsf' OR title.keyword ='elastic') limit 5 ");
System.out.println(data);
}
/**
* 分组和函数计算
*/
@Test
public void testGroupQuery() throws SQLException {
initDBSource();
List<HashMap> data = SQLExecutor.queryListWithDBName(HashMap.class,"es","SELECT title.keyword,max(documentId) as max_id FROM dbclobdemo as mytable group by title.keyword limit 5");
System.out.println(data);
}
/**
* 查看所有的索引表
* @throws SQLException
*/
@Test
public void testShowTable() throws SQLException {
initDBSource();
List<HashMap> data = SQLExecutor.queryListWithDBName(HashMap.class,"es","SHOW tables");
System.out.println(data);
}
/**
* 如 dbclob 开头的索引,注意通配符只支持 %和 _,分别表示多个和单个字符(什么,不记得了,回去翻数据库的书去!)
* @throws SQLException
*/
@Test
public void testShowTablePattern() throws SQLException {
initDBSource();
List<HashMap> data = SQLExecutor.queryListWithDBName(HashMap.class,"es","SHOW tables 'dbclob_'");
System.out.println(data);
data = SQLExecutor.queryListWithDBName(HashMap.class,"es","SHOW tables 'dbclob%'");
System.out.println(data);
}
/**
* 查看索引的字段和元数据
* @throws SQLException
*/
@Test
public void testDescTable() throws SQLException {
initDBSource();
List<HashMap> data = SQLExecutor.queryListWithDBName(HashMap.class,"es","DESC dbclobdemo");
System.out.println(data);
data = SQLExecutor.queryListWithDBName(HashMap.class,"es","SHOW COLUMNS IN dbclobdemo");
System.out.println(data);
}
/**
* 不记得 ES 支持哪些函数,只需要执行下面的命令,即可得到完整列表
* @throws SQLException
*/
@Test
public void testShowFunctin() throws SQLException {
initDBSource();
List<HashMap> data = SQLExecutor.queryListWithDBName(HashMap.class,"es","SHOW FUNCTIONS");
System.out.println(data);
//同样支持通配符进行过滤:
data = SQLExecutor.queryListWithDBName(HashMap.class,"es","SHOW FUNCTIONS 'S__'");
System.out.println(data);
}
}
如果执行的时候报错:
可以采用正式的license或者在elasticsearch.yml文件最后添加以下配置即可:
xpack.license.self_generated.type: trial
3.bboss 针对es jdbc的替代解决方案
bboss 提供一组sql和fetchQuery API,可替代es jdbc模块;采用bboss即可拥有bboss的客户端自动发现和容灾能力、对es、jdk、spring boot的兼容性能力,又可以拥有es jdbc的所有功能,同时还解决了因为引入es jdbc导致项目对es版本的强依赖和兼容性问题,参考demo:
orm查询
https://gitee.com/bbossgroups/eshelloword-booter/blob/master/src/test/java/org/bboss/elasticsearchtest/sql/SQLOrmTest.java
分页查询
https://gitee.com/bbossgroups/eshelloword-booter/blob/master/src/test/java/org/bboss/elasticsearchtest/sql/SQLPagineTest.java
开发交流
elasticsearch sql官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-sql.html
elasticsearch技术交流群:166471282
elasticsearch微信公众号:
分享到:
相关推荐
Elasticsearch(ES)多条件过滤实现案例(6.3版本), 搜索过滤,对日期进行时分秒区间判断,多条件整合优化
Elasticsearch(简称ES)是一款基于Lucene的开源全文搜索引擎,它以其分布式、实时、高可扩展性以及强大的分析能力而受到广泛赞誉。在现代大数据环境中,Elasticsearch常用于日志分析、实时监控、数据搜索等场景。 ...
3. **数据导入工具**:Elasticsearch提供了多种数据导入工具,如Logstash、JDBC River(已废弃)、Beats(Filebeat、Metricbeat等)和Ingest Node。Logstash尤其常用,它可以处理多种格式的数据,并通过管道...
- **Elasticsearch River JDBC:** 描述如何使用 JDBC 连接器将关系型数据库中的数据流式导入 Elasticsearch。 #### 结论 Elasticsearch 作为一款高性能的搜索与数据分析引擎,提供了丰富的功能和灵活的 API 接口,...
Elasticsearch(ES)6 是一个流行的、高性能的全文搜索引擎,常用于大数据分析、日志聚合、实时搜索等场景。它基于 Lucene 库,提供了分布式、RESTful 风格的 API,使得数据存储和检索变得简单高效。本教程资料是...
然后通过过滤器进行清洗、转换,最后将处理后的数据发送到目标存储系统,如 Elasticsearch 进行搜索和分析,或者使用 "logstash-output-jdbc" 插件写入数据库进行持久化存储。 安装 "logstash-output-jdbc" 插件的...
https://blog.csdn.net/qq_25067199/article/details/79672209),作者详细介绍了如何创建一个自定义的ElasticsearchSink,通过Flume将日志数据高效地导入Elasticsearch。 在这个实践中,作者首先创建了一个名为`...
【标题】中的“基于SpringBoot+MyBatis+Shiro+Redis+ElasticSearch的企业级博客系统”是一个集成多种技术的项目实例,它涵盖了现代Web应用开发中的关键组件。以下将详细解析这些技术及其在博客系统中的作用: 1. **...
该项目是一个使用Spring Boot、MyBatis和Elastic...总之,这个项目是一个综合运用了多种现代Java技术的实践案例,对于学习和掌握Spring Boot、MyBatis和Elasticsearch等技术的开发者来说,是一个很好的参考和学习资源。
10. **JDBC与ODBC接口**:作为Java开发者,了解如何通过JDBC(Java Database Connectivity)和ODBC(Open Database Connectivity)接口与KingbaseES V8交互是必要的,手册将详细介绍这两者的使用。 11. **案例分析...
在本项目中,我们主要探讨的是一个基于Spring、SpringMVC和Mybatis的整合应用案例,搭配MySQL数据库,实现了一些常见的功能,如文件上传下载和拦截器机制。这个案例是开发者自我测试和学习的一种实践,同时也可供...
本文将详细介绍如何利用Logstash来实现日志文件的实时增量同步到Elasticsearch中,并通过实际案例来展示整个过程。 #### 目标 本文的目标是将本地磁盘存储的日志文件通过Logstash同步到Elasticsearch中,实现全量...
spring boot 实践学习案例,与其它组件结合如 mybatis、jpa、dubbo、redis、mongodb、memcached、kafka、rabbitmq、activemq、elasticsearch、security、shiro等 #### Spring Boot 版本 - 2.0.3.RELEASE #### 模块...
spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC spring.datasource.username=username spring.datasource.password=password spring.jpa.hibernate.ddl-...
在大数据处理领域,它常被用于实时数据流传输,将数据从源头迁移到目标存储,如 Hadoop HDFS 或 Elasticsearch。在本案例中,我们关注的是 Flume 的 JDBC Source,它允许我们从关系型数据库中抽取数据。 标题 ...
Springboot-Notebook是一系列以springboot为基础的开发框架,整合了Redis , Rabbitmq , ES , MongoDB , sharding-jdbc , zookeeper等互联网主流技术,实现了开发中常见功能点的综合实战性案例。 本着拿来即用的...
日志记录和监控也是必不可少的部分,例如使用Log4j进行日志记录,配合ELK(Elasticsearch、Logstash、Kibana)堆栈进行日志分析。 在实际部署时,可能采用Docker容器化部署,利用Docker Compose或Kubernetes进行...
本案例中,我们关注的是一个与shell脚本、MySQL数据库、Elasticsearch(通常简称为ES)以及通过SMTP服务器(如mail465)发送邮件相关的任务。这个压缩包文件"shell脚本定时执行logstash任务异常mail465发邮件.rar...
Log4j、Logback和SLF4J等日志框架是Java开发中的常用选择,结合ELK(Elasticsearch, Logstash, Kibana)或Graylog等日志分析工具,可以实现日志收集、检索和分析。 8. **异常处理**:Java提供了try-catch-finally...