侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 352 篇文章
  • 累计创建 135 个标签
  • 累计收到 10 条评论

目 录CONTENT

文章目录

ES教程16-ElasticSearch-SQL插件的安装及使用

孔子说JAVA
2022-10-21 / 0 评论 / 0 点赞 / 59 阅读 / 3,407 字 / 正在检测是否收录...
广告 广告

ElasticSearch-SQL(后文简称es-sql)是ElasticSearch的一个插件,是一个X-Pack组件,提供了es的类sql查询的相关接口,允许针对Elasticsearch实时执行类似SQL的查询。无论使用REST接口,命令行还是JDBC,任何客户端都可以使用SQL对Elasticsearch中的数据进行原生搜索和聚合数据。可以将Elasticsearch SQL看作是一种翻译器,它可以将SQL翻译成Query DSL。

1、插件下载安装

1.1 下载

ElasticSearch-sql插件下载地址

官方文档(ElasticSearch[7.x])

在线sql转dslhttp://www.atotoa.com/

ElasticSearch-sql插件下载版本要与es版本对应,如我用的 elasticsearch 版本是 7.17.3,所以安装对应版本的elasticsearch-sql-7.4.1.0.zip,

image-1666311971331

image-1666311999993

下载链接 elasticsearch-sql-7.17.3.0.zip

1.2 安装

我的服务器上已安装了elasticsearch,安装路径为:/home/es/es/elasticsearch-7.17.3。将下载下来的插件 elasticsearch-sql-7.17.3.0.zip 上传到服务器的 /home/es/plugin 目录,插件文件地址为:/home/es/plugin/elasticsearch-sql-7.17.3.0.zip 。

1)elasticsearch-sql离线部署方式

将 elasticsearch-sql-7.17.3.0.zip 解压到 es 安装目录下的 plugins 目录(/home/es/es/elasticsearch-7.17.3/plugins)。

# 解压sql压缩包到 ElasticSearch 安装目录的 plugins/sql 目录下
unzip elasticsearch-sql-7.17.3.0.zip -d /home/es/es/elasticsearch-7.17.3/plugins/sql/

重启es

# 查找 ES 进程
ps -ef | grep elastic

# 我们找到的 ES 进程号为 5005 , 关闭它
$ kill 5005

# 启动 ES 进程(需要使用es用户)
$ bin/elasticsearch -d

2)elasticsearch-sql离线安装方式

# 进入es安装目录
cd /home/es/es/elasticsearch-7.17.3/

# 离线安装
./bin/elasticsearch-plugin install file:/home/es/plugin/elasticsearch-sql-7.17.3.0.zip

3)elasticsearch-sql在线安装方式

该安装方式不需要提前下载sql插件,直接使用插件的官网地址进行安装。

# 进入es安装目录
cd /home/es/es/elasticsearch-7.17.3/

# 在线安装
./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/7.17.3.0/elasticsearch-sql-7.17.3.0.zip

2、使用方式

使用kibana,http://172.19.82.206:5601/app/dev_tools#/console,执行下述语句:

POST /_sql?format=txt
{
  "query": "SELECT * FROM student "
}

image-1666314361348

可以看到通过sql方式查询到了结果,format=txt 表示以文本形式输出(简单表格格式),如果不加这句,则结果以json格式输出,如下图:

image-1666314465617

3、安装SQL的web服务

github标注es 5.0之上需要下载 es-sql 的extract site, 即 es-sql-site-standalone.zip,其实就是安装一个运行sql的web服务,可以选择不安装。

# 下载
wget https://github.com/NLPchina/elasticsearch-sql/releases/download/5.4.1.0/es-sql-site-standalone.zip

# 解压操作
unzip es-sql-site-standalone.zip

# 进入目标文件夹
cd es-sql-site-standalone\es-sql-site\site-server

# 安装
npm install express --save

# 运行
node node-server.js &

默认的es-sql端口号是8080,如有冲突需要修改site_configuration.json中的端口配置:

cd es-sql-site/site-server
vim site_configuration.json

修改端口配置:

{
    "port":8088
}

重启es,打开es-sql web页面(访问http://localhost:8080/),然后配置右上角es地址,就可以写sql啦,默认的库相当于索引。

image-1666315551991

4、查询语法

在 ElasticSearch 中使用 SQL 查询的语法与在数据库中使用基本一致,具体格式如下:

SELECT [TOP [ count ] ] 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 ] [, ...] ) ) ]

WHERE

可以使用WHERE语句设置查询条件,比如查询age字段为19的记录且查询前10条,查询语句如下:

POST /_sql?format=txt
{
  "query": "SELECT address,createTime,name FROM city WHERE age=19 LIMIT 10 "
}

image-1666310836309

GROUP BY

使用GROUP BY语句对数据进行分组,统计出分组记录数量,最大age和平均salary等信息,查询语句如下:

POST /_sql?format=txt
{
  "query": "SELECT createTime,COUNT(*),MAX(age),AVG(salary) FROM city GROUP BY createTime LIMIT 10"
}

image-1666310858012

HAVING

使用HAVING语句对分组数据进行二次筛选,比如筛选分组记录数量大于15的信息,查询语句如下:

POST /_sql?format=txt
{
  "query": "SELECT age,COUNT(*),AVG(salary) FROM city GROUP BY age HAVING count(*)>15 LIMIT 10"
}

image-1666314765014

ORDER BY

使用ORDER BY语句对数据进行排序,比如按照salary字段从高到低排序,查询语句如下:

POST /_sql?format=txt
{
  "query": "SELECT createTime,age,salary FROM city ORDER BY salary DESC LIMIT 10 "
}

image-1666314798161

DESCRIBE

使用DESCRIBE语句查看表(ES中为索引)中有哪些字段,比如查看alicia表的字段,查询语句如下:

POST /_sql?format=txt
{
  "query": "DESCRIBE alicia"
}

image-1666314846440

SHOW TABLES

使用SHOW TABLES查看所有的表(ES中为索引),查询语句如下:

POST /_sql?format=txt
{
  "query": "SHOW TABLES"
}

image-1666314881140

以上只列出了一些常用的使用方式,有关ElasticSearch-SQL插件中如何使用sql查询的介绍详见下个教程。

0

评论区