Elasticsearch-05-Elasticsearch-sql组件史上最全详解


系列文章:
Elasticsearch-04-Elasticsearch组件head和kibana详解
Elasticsearch-03-JavaApi以及springboot中操作-RestHighLevelClient
Elasticsearch-02-es的restapi使用
Elasticsearch-01-es概念及安装

前言

Elasticsearch 的官方查询语言是 Query DSL,既然是官方指定的,说明最吻合 ES 的强大功能,为ES做支撑。那么我们为什么还用 SQL 查询?这是否是多此一举了呢?

其实,存在毕竟有存在的道理,存在即合理。SQL 作为一个数据库查询语言,它语法简洁,书写方便而且大部分服务端程序员都清楚了解和熟知它的写法。但是作为一个 ES 萌新来说,就算他已经是一位编程界的老江湖,但是如果他不熟悉 ES ,那么他如果要使用公司已经搭好的 ES 服务,他必须要先学习 Query DSL,学习成本也是一项影响技术开发进度的因素而且不稳定性高。但是如果 ES 查询支持 SQL的话,那么也许就算他是工作一两年的同学,他虽然不懂 ES的复杂概念,他也能很好的使用 ES 而且顺利的参加到开发的队伍中,毕竟SQL 谁不会写呢?

1:elasticsearch-sql介绍

我们正式介绍下我们的主角 - Elasticsearch-SQL,Elasticsearch-SQL不属于 Elasticsearch 官方的,它是 NLPChina(中国自然语言处理开源组织)开源的一个 ES 插件,主要功能是通过 SQL 来查询 ES,其实它的底层是通过解释 SQL,将SQL 转换为 DSL 语法,再通过DSL 查询。

Elasticsearch-SQL目前已经支持大概所有版本的 ES,而且最近的7.17.4的也在支持的范围了,所以可以看得出来维护的还是蛮频繁的。
但是:这个项目已经不维护了,具体啥原因不知道,可能是es官方出了自己的x-pack-sql(收费的,后续介绍)

github地址:https://github.com/NLPchina/elasticsearch-sql/

维基百科:https://github.com/NLPchina/elasticsearch-sql/wiki

2:安装elasticsearch-sql插件

1:es-sql安装

在 5.0之前的安装方式为:plugin install

./bin/plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/2.4.6.0/elasticsearch-sql-2.4.6.0.zip

在5.0之后(包括6.x)的安装方式为:elasticsearch-plugin install

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/5.0.1/elasticsearch-sql-5.0.1.0.zip

如:7.8.0版本为:

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/7.8.0.0/elasticsearch-sql-7.8.0.0.zip

如果我们安装不成功,我们可以直接下载 Elasticsearch-SQL插件的压缩包,然后解压,完成之后重命名文件夹为 sql ,放到 ES 的安装路径的 plugins目录中,例如:…\elasticsearch-7.8.0\plugins\sql。
然后记得重启

在这里插入图片描述

2:使用sql插件

1:在 elasticsearch 1.x / 2.x 上,访问 elasticsearch-sql web 前端:

http://localhost:9200/_plugin/sql/

2:在 elasticsearch 5.x/6.x 上,使用 elasticsearch sql 浏览器插件

在 elasticsearch 5.x/6.x 上,使用 elasticsearch sql site chrome https://github.com/shi-yuan/elasticsearch-sql-site-chrome扩展(确保在 elasticsearch.yml 上启用 cors)。
然后就可以通过扩展器插件进行链接:
在这里插入图片描述

3:在 elasticsearch 5.x/6.x 上,使用 standalone安装在服务端

下载staandalone

unzip es-sql-site-standalone.zip
cd site-server/
npm install express --save

也可以更改standalone启动端口

vi site_configuration.json

在这里插入图片描述

3:使用sql插件

1:使用restapi查询-http

es安装了sql插件后,就可以使用httprest进行查询
请注意:从7.5.0.0开始,之前使用的一些查询路径进行了更改

/_sql?sql= 改为_nlpcn/sql?sql= (这是执行查询sql的)
_sql/_explain?sql= 改为 _nlpcn/sql/explain?sql= (这是讲sql翻译为dcl语句的)
在这里插入图片描述

2:web客户端可视化页面使用

直接在web前端页面上写sql即可,支持常规的sql语法
只不多表名 tableName 的地方现在改为了索引名 indexName
在这里插入图片描述

3:Java-利用jdbc链接使用

1:导包

从maven中央仓库找,但是不一定能找到所有版本的
在这里插入图片描述
如果没找到,去我们当时下载的那个插件哪里有,可以自行导入
在这里插入图片描述

2:利用DruidDataSource链接es并查询

package es_sql;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.ElasticSearchDruidDataSourceFactory;
import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

/**
 * @author wkl
 * @create 2022-06-30 14:23
 */
public class ESjdbsSql {
   

    //这是我提前创建的索引名称,里面有数据
    private static final String indexName = "user";

    @Test
    public void esJdbc() throws Exception {
   
        Properties properties = new Properties();
        //请注意,9200端口是web和rest访问的端口,9300才是es集群之间和代码通讯的端口
        properties.put("url", "jdbc:elasticsearch://127.0.0.1:9300/" + indexName);
        DruidDataSource dds = (DruidDataSource) ElasticSearchDruidDataSourceFactory.createDataSource(properties);
        Connection connection = dds.getConnection();
        //执行查询语句
        PreparedStatement ps = connection.prepareStatement("SELECT  * from " + indexName);
        ResultSet resultSet = ps.exe
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苍煜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值