Elasticsearch JDBC案例介绍

[i][b]The best elasticsearch highlevel java rest api-----[url=https://www.oschina.net/p/bboss-elastic]bboss [/url][/b][/i]

Elasticsearch 6.3以后的版本可以通过jdbc操作es,该功能还在不断的完善当中,本文介绍es jdbc使用方法。

[size=medium][b]1.首先在工程中导入es jdbc maven坐标:[/b][/size]
导入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>

[size=medium][b]2.通过jdbc驱动执行elasticsearch sql相关功能[/b][/size]
启动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);

}
}

如果执行的时候报错:

[img]https://oscimg.oschina.net/oscnet/b84c48aeb829871a1b394a42027b8b1a52c.jpg[/img]

可以采用正式的license或者在elasticsearch.yml文件最后添加以下配置即可:

[b]xpack.license.self_generated.type: trial[/b]

[b][size=medium]3.bboss 针对es jdbc的替代解决方案[/size][/b]
bboss 提供一组sql和fetchQuery API,可替代es jdbc模块;采用bboss即可拥有bboss的客户端自动发现和容灾能力、对es、jdk、spring boot的兼容性能力,又可以拥有es jdbc的所有功能,同时还解决了因为引入es jdbc导致项目对es版本的强依赖和兼容性问题,参考demo:

[b]orm查询[/b]
[url]https://gitee.com/bbossgroups/eshelloword-booter/blob/master/src/test/java/org/bboss/elasticsearchtest/sql/SQLOrmTest.java[/url]
[b]分页查询[/b]
[url]https://gitee.com/bbossgroups/eshelloword-booter/blob/master/src/test/java/org/bboss/elasticsearchtest/sql/SQLPagineTest.java[/url]

[b]开发交流[/b]
elasticsearch sql官方文档:

[url]https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-sql.html[/url]

[b]elasticsearch技术交流群[/b]:166471282

[b]elasticsearch微信公众号[/b]:
[img]https://static.oschina.net/uploads/space/2017/0617/094201_QhWs_94045.jpg[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值