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

文章目录

  • 前言
  • 1:elasticsearch-sql介绍
  • 2:安装elasticsearch-sql插件
    • 1:es-sql安装
    • 2:使用sql插件
      • 1:在 elasticsearch 1.x / 2.x 上,访问 elasticsearch-sql web 前端:
      • 2:在 elasticsearch 5.x/6.x 上,使用 elasticsearch sql 浏览器插件
      • 3:在 elasticsearch 5.x/6.x 上,使用 standalone安装在服务端
  • 3:使用sql插件
    • 1:使用restapi查询-http
    • 2:web客户端可视化页面使用
    • 3:Java-利用jdbc链接使用
      • 1:导包
      • 2:利用DruidDataSource链接es并查询
    • 4:利用SearchDao 封装工具类来链接es
    • 5:sql插件支持的语法
      • 1:基本查询和条件查询
      • 2:text类型的模糊查询和关键字查询
        • 1:text分词查询
        • 2:text的keyword精准查询
        • 3:text的keyword模糊查询
      • 3:聚合查询-max,min,avg.....
      • 4:过滤字段
  • 4:elasticsearch从6.3后自身带的x-pack-sql插件
    • 1:自带的x-pack-sql插件
    • 2:利用postman访问restapi
    • 3:利用kibnan的开发工具
      • 1:kibana查询支持的参数
      • 2:支持的select语法
      • 3:DESCRIBE查看索引信息
      • 4:SHOW语句
      • 5:其他max,min...等聚合函数都支持
    • 4:java链接方式(付费)

系列文章:
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。
然后记得重启

Elasticsearch-05-Elasticsearch-sql组件史上最全详解_第1张图片

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)。
然后就可以通过扩展器插件进行链接:
Elasticsearch-05-Elasticsearch-sql组件史上最全详解_第2张图片

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

Elasticsearch-05-Elasticsearch-sql组件史上最全详解_第3张图片

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语句的)
Elasticsearch-05-Elasticsearch-sql组件史上最全详解_第4张图片

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

直接在web前端页面上写sql即可,支持常规的sql语法
只不多表名 tableName 的地方现在改为了索引名 indexName
Elasticsearch-05-Elasticsearch-sql组件史上最全详解_第5张图片

3:Java-利用jdbc链接使用

1:导包

从maven中央仓库找,但是不一定能找到所有版本的
Elasticsearch-05-Elasticsearch-sql组件史上最全详解_第6张图片
如果没找到,去我们当时下载的那个插件哪里有,可以自行导入
Elasticsearch-05-Elasticsearch-sql组件史上最全详解_第7张图片

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() 

你可能感兴趣的:(#,Elasticsearch,elasticsearch,sql,大数据)