网站首页 > 博客文章 正文
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例,最常见的是作为搜索引擎,提供项目中全文搜索。
一提到Elasticsearch,必然需要提到Query DSL,DSL(Domain Specific Language特定领域语言)以JSON请求体的形式,但DSL语法并没有那么直观,如果不经常使用,就会遗忘,等需要用的时候,感觉非常不方便。
今天我们就看下官方提供的X-Pack,它包含一项SQL功能,可对Elasticsearch索引执行SQL查询并以表格格式返回结果。Elasticsearch SQL(6.3版本以后)不仅允许针对Elasticsearch实时执行类似SQL的查询。也可以使用REST接口,或者使用JDBC,保证任何客户端都可以使用SQL对Elasticsearch中的数据进行原生搜索和聚合数据。我们可以将Elasticsearch SQL看作是一种翻译器,它可以将SQL翻译成Query DSL。
官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/xpack-sql.html
下面我们先使用es + kabana体验一下(安装就不说明了)
构建数据
先创建索引,注意es 7.x去掉了type,本文使用的是7.8.0版本的es和kabana。
创建索引
放入文档数据
SQL查询数据
SQL语法
在ES中使用SQL查询的语法与在数据库中使用基本一致,具体格式如下:
SELECT select_expr [, ...]
[ FROM table_name ]
[ WHERE condition ]
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition]
[ ORDER BY expression [ ASC | DESC ] [, ...] ]
[ LIMIT [ count ] ]
[ PIVOT ( aggregation_expr FOR column IN ( value [ [ AS ] alias ] [, ...] ) ) ]
大家可以在实际中自行体验一下,也可以通过下列语句,将sql转成DSL
POST /_sql/translate
{
"query": "SELECT * FROM student LIMIT 10"
}
下面我们来看下jdbc的操作
JDBC使用SQL查询
引入依赖
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>x-pack-sql-jdbc</artifactId>
<version>7.8.0</version>
</dependency>
注意该依赖maven中央仓库没有,需要配置仓库地址
<repositories>
<repository>
<id>elastic.co</id>
<url>https://artifacts.elastic.co/maven</url>
</repository>
</repositories>
jdbc相关代码
Class.forName("org.elasticsearch.xpack.sql.jdbc.EsDriver");
Connection connection = DriverManager.getConnection("jdbc:es://http://127.0.0.1:9200");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select name from student");
while (resultSet.next()){
System.out.println(resultSet.getString("name"));
}
执行后,报错如下
Exception in thread "main" java.sql.SQLInvalidAuthorizationSpecException: current license is non-compliant for [jdbc]
at org.elasticsearch.xpack.sql.client.JreHttpUrlConnection$SqlExceptionType.asException(JreHttpUrlConnection.java:330)
at org.elasticsearch.xpack.sql.client.JreHttpUrlConnection.parserError(JreHttpUrlConnection.java:207)
at org.elasticsearch.xpack.sql.client.JreHttpUrlConnection.request(JreHttpUrlConnection.java:170)
at org.elasticsearch.xpack.sql.client.HttpClient.lambda$post$1(HttpClient.java:106)
at org.elasticsearch.xpack.sql.client.JreHttpUrlConnection.http(JreHttpUrlConnection.java:66)
at org.elasticsearch.xpack.sql.client.HttpClient.lambda$post$2(HttpClient.java:105)
at java.security.AccessController.doPrivileged(Native Method)
at org.elasticsearch.xpack.sql.client.HttpClient.post(HttpClient.java:104)
at org.elasticsearch.xpack.sql.client.HttpClient.query(HttpClient.java:81)
at org.elasticsearch.xpack.sql.jdbc.JdbcHttpClient.query(JdbcHttpClient.java:70)
at org.elasticsearch.xpack.sql.jdbc.JdbcStatement.initResultSet(JdbcStatement.java:160)
at org.elasticsearch.xpack.sql.jdbc.JdbcStatement.execute(JdbcStatement.java:151)
at org.elasticsearch.xpack.sql.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:40)
at com.ganhuojun.gracefulshutdown.configuration.Test.main(Test.java:22)
发现current license is non-compliant for [jdbc],说明功能被限制,查询下官网发现,jdbc在免费开源的版本是不支持的
查询地址:https://www.elastic.co/cn/subscriptions
那怎么解决呢?
官网提供了我们修改license api的功能,去体验一些新的功能
https://www.elastic.co/guide/en/elasticsearch/reference/master/start-trial.html
按照官网操作后,执行前面的jdbc代码,可以得到正确结果
由于jdbc版本使用需要付费,建议在实际项目中,使用DSL或者SQL REST API操作。
猜你喜欢
- 2024-10-24 持久层框架JPA与Mybatis该如何选型
- 2024-10-24 hibatis--mybatis,自动生成SQL, 通用Mapper, 通用Dao
- 2024-10-24 Elasticsearch 6.0.0官方参考指南翻译
- 2024-10-24 推荐一个高效美观易用的服务器运维工具
- 2024-10-24 Java 操作之RestHighLevelClient查询详解
- 2024-10-24 如何在 Elasticsearch 上应用机器学习排序插件
- 2024-10-24 「开源资讯」Apache Solr 8.6.0 发布,Java 全文搜索服务器
- 2024-10-24 最轻量级的Kubernetes云原生日志框架Loki
- 2024-10-24 ElasticSearch学习系列 - (3) Python操作es
- 2024-10-24 全功能orm工具sorms 1.0.10 发布,合使用Spring,Spring boot用户
你 发表评论:
欢迎- 435℃用AI Agent治理微服务的复杂性问题|QCon
- 430℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 412℃初次使用IntelliJ IDEA新建Maven项目
- 409℃Maven技术方案最全手册(mavena)
- 403℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 401℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 397℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 387℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)