ElasticSearch SQL查询适配器,为Elasticsearch提供SQL查询的功能。支持跨集群查询,可拓展异构数据源。将calcite基于配置文件的配置方式改为通过代码灵活控制,可动态增加数据源,并支持完整的SQL查询功能。

Overview

📝 使用指南

ElasticSearchSQL查询适配器,为Elasticsearch提供SQL查询的功能。支持完整的SQL查询和跨Elasticsearch集群查询。通过代码简单配置,使项目根据Elasticsearchindex映射为Table

License CodeBeat Language Build Size Contributors
Hex.pm codebeat badge language java GitHub release (latest by date) GitHub repo size GitHub contributors

🚀 效果展示

Elasticsearch上创建一个person索引,有四个字段name,age,address,room

select name,age,address,room from person
name age address room
zhangwei 26 shanghai 3602
yifei 25 shanghai 3601
youyou 24 sichuan 3602
lvziqiao 25 shanghai 3602
zengxiaoxian 26 shanghai 3601
meijia 24 shanghai 3601
guangu 26 dongjing 3602

🚀 使用方法

在获得Connection之前先使用ElasticsearchTableManager设置要使用SQL管理的index索引,且通过ElasticsearchTableManager可动态的增加Table,这个过程是线程安全的。

//注册Driver
Class.forName("com.github.hongshuboy.adapter.elasticsearch.Driver");

//设置缺省状态下的Elasticsearch连接地址
ElasticsearchTableManager.setDefaultESHostAndPort("your es host", port);

//将index纳入SQL并设置index的schema
List<String> columns = Arrays.asList("name", "age", "address", "room");
List<FieldType> types = Arrays.asList(FieldType.STRING, FieldType.INT, FieldType.STRING, FieldType.INT);
//参数:index name/table alias/columns/types
ElasticsearchTableManager.createTable("person", "person", columns, types);

//get connection
Connection connection = DriverManager.getConnection("jdbc:hongshuboy:lex=JAVA");
Statement statement = connection.createStatement();

//execute query
ResultSet resultSet = statement.executeQuery("select * from person");
printResultSet(resultSet);

☑️ 看一下createTable方法

  • indexelasticsearch index

  • alias:table别名,SQL查询时使用的table name

  • columns:table columns,字段名需要与Elasticsearch一致

  • sqlTypes:字段类型

可以使用带有esHostport的重载方法指定来自另一个Elasticsearch集群的index

/**
 * add elasticsearch index to connection
 *
 * @param index    elasticsearch
 * @param alias    table alias name
 * @param columns  columns in index that you want to in table
 * @param sqlTypes table column types
 */
void createTable(String index, 
              String alias, 
              List<String> columns, 
              List<FieldType> sqlTypes) {
    //...
}

因为Elasticsearch不推荐,也以实际行动移除了type,所以这里考虑后还是使用index对应一个SQL表的对应关系

跨Elasticsearch集群

如果单集群添加表,为了避免麻烦,可以提前设置默认的集群连接,在不指定Elasticsearch连接地址的情况下,都会默认使用这里设置的连接地址

ElasticsearchTableManager.setDefaultESHostAndPort("your es host", port);

如果跨多个集群,可以使用带有esHostportcreateTable方法,这样一来,在SQL中就可以直接进行两表的join等操作

/**
 * @see ElasticsearchTableManager#createTable(String, String, List, List)
 */
public static void createTable(String esHost, int port, String index, String alias, List<String> columns, List<FieldType> sqlTypes) {
    assert columns.size() == sqlTypes.size();
    tableMetas.add(new TableMeta(esHost, port, index, alias, columns, sqlTypes));
}

关于Schema

查询时不需要指定数据库,直接使用table name即可

如果你添加了很多index,应该考虑使用alias区别

select name,age,address,room from person

条件查询

select * from person where age > 25
name age address room
zhangwei 26 shanghai 3602
zengxiaoxian 26 shanghai 3601
guangu 26 dongjing 3602

group by

select age,count(*) as num from person group by age
age num
24 2
25 2
26 3

🚀 其他如join查询等也都支持,可自行测试。

🙆‍♂️ 作者 Author

弘树丶

wangpeng(hongshu)

Email:[email protected]

©️ 版权说明 License

本项目使用Apache License 2.0授权许可,详情请参阅 \LICENSE\NOTICE

hongshuboy/elasticsearch-sql-adapter is licensed under the Apache License 2.0,please read LICENSE and NOTICE for more information

Copyright ©2020 wangpeng(hongshu)

You might also like...

This application will help you to generate Elasticsearch template based on your data

Welcome to templates generator application for Elasticsearch This application will help you to generate the template and/or test index, based on your

Jan 2, 2023

Reindex - application for visualize, optimize and automate your Elasticsearch reindex process

Welcome to reindex application for Elasticsearch This application will help you to reindex one or more existing indices, into the local or remote Elas

Jan 2, 2023
Comments
Owner
弘树丶
大数据爱好者/《名侦探柯南》爱好者
弘树丶
:elephant: Elasticsearch real-time search and analytics natively integrated with Hadoop

Elasticsearch Hadoop Elasticsearch real-time search and analytics natively integrated with Hadoop. Supports Map/Reduce, Apache Hive, Apache Pig, Apach

elastic 1.9k Dec 22, 2022
mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。

mall学习教程 简介 mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5

macro 11.7k Jan 8, 2023
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。

mall-swarm 友情提示 快速体验项目:在线访问地址。 全套学习教程:《mall学习教程》。 Spring Cloud全套教程:《SpringCloud学习教程》。 专属学习路线:学习不走弯路,整理了套非常不错的《mall专属学习路线》。 项目交流:想要加群交流项目的朋友,可以加入mall项目

macro 9.7k Jan 3, 2023
【咕泡学院实战项目】-基于SpringBoot+Dubbo构建的电商平台-微服务架构、商城、电商、微服务、高并发、kafka、Elasticsearch

咕泡商城- 微服务架构实战 咕泡商城是咕泡学院 Java架构课程中,帮助学员对于技术更好落地的一个实战项目,项目基于springboot2.1.6.RELEASE+Dubbo2.7.3 来构建微服务。 业务模块划分,尽量贴合互联网公司的架构体系。所以,除了业务本身的复杂度不是很高之外,整体的架构基本

Mic 4.5k Dec 26, 2022
简繁体汉字转拼音的项目,解决多音字的问题。ElasticSearch、solr 的拼音分词工具

pinyin-plus 汉字转拼音的库,有如下特点 拼音数据基于 cc-cedict 、kaifangcidian 开源词库 基于拼音词库的数据初始化分词引擎进行分词,准确度高,解决多音字的问题 支持繁体字 支持自定义词库,词库格式同 cc-cedict 字典格式 api 简单,分为普通模式、索引模

TapTap 103 Dec 25, 2022
🦄 开源社区系统:基于 SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security + ... 并提供详细的开发文档和配套教程。包含帖子、评论、私信、系统通知、点赞、关注、搜索、用户设置、数据统计等模块。

Echo — 开源社区系统 项目上线到服务器之后可能会出现各种各样的 BUG,比如 Elasticsearch 服务启动失败导致搜索模块不可用,但是在本地运行是完全没问题的,所以各位小伙伴可以放心下载部署。 ?? 项目简介 Echo 是一套前后端不分离的开源社区系统,基于目前主流 Java Web

小牛肉 434 Jan 7, 2023
Official Elasticsearch Java Client

Elasticsearch Java Client The official Java client for Elasticsearch. Note: this project is still a work in progress. This client is meant to replace

elastic 230 Jan 8, 2023
mall4cloud微服务商城,基于Spring Cloud、Nacos、Seata、Mysql、Redis、RocketMQ、canal、ElasticSearch、minio的B2B2C微服务商城系统,采用主流的互联网技术架构、全新的UI设计 B2B2C微服务商城|小程序微服务商城|

README 前言 本商城是基于Spring Cloud、Nacos、Seata、Mysql、Redis、RocketMQ、canal、ElasticSearch、minio的微服务B2B2C电商商城系统,采用主流的互联网技术架构、全新的UI设计、支持集群部署、服务注册和发现以及拥有完整的订单流程等

null 3k Jan 1, 2023
An example on how to build a configurable widget to trigger external searches along with Liferay search to Elasticsearch.

Liferay External Searches An example on how to build a configurable widget to trigger external searches along with Liferay search to Elasticsearch. Ge

Louis-Guillaume Durand 4 Oct 25, 2021
The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary.

IK Analysis for Elasticsearch The IK Analysis plugin integrates Lucene IK analyzer (http://code.google.com/p/ik-analyzer/) into elasticsearch, support

Medcl 14.6k Jan 5, 2023