The best elasticsearch highlevel java rest api-----bboss html
Elasticsearch 6.3之后的版本能够经过jdbc操做es,该功能还在不断的完善当中,本文介绍es jdbc使用方法。java
导入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.3.6</version> </dependency> 在pom中添加elastic maven库 <repositories> <repository> <id>elastic.co</id> <url>https://artifacts.elastic.co/maven</url> </repository> </repositories>
直接看执行各类sql功能的代码ESJdbcTest:git
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); } }
若是执行的时候报错:web
能够采用正式的license或者在elasticsearch.yml文件最后添加如下配置便可:spring
xpack.license.self_generated.type: trialsql
bboss 提供一组sql和fetchQuery API,可替代es jdbc模块;采用bboss便可拥有bboss的客户端自动发现和容灾能力、对es、jdk、spring boot的兼容性能力,又能够拥有es jdbc的全部功能,同时还解决了由于引入es jdbc致使项目对es版本的强依赖和兼容性问题,参考demo:shell
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官方文档:express
https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-sql.htmlapache
elasticsearch技术交流:166471282
elasticsearch技术交流: