分享一款Elasticsearch-SQL插件--使用SQL语法查询Elasticsearch-sql文件怎么打开

概述

Elasticsearch-SQL是Elasticsearch的一个插件,它可以让我们通过类似SQL的方式对Elasticsearch中的数据进行查询。

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

分享一款Elasticsearch-SQL插件--使用SQL语法查询Elasticsearch


安装部署

不同Elasticsearch版本需要安装的插件版本也不同,使用的Elasticsearch版本是2.3.3,对应版本插件安装方法是(先切换到Elasticsearch目录下):

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

其实在生产环境中很多服务器是不能直接连接外网进行下载的。这里先将文件下载到本地,然后再上传到生产环境的服务器中,在上传到服务器后,从本地文件安装插件。安装插件时在install后面加"file:",之后加Elasticsearch-sql.zip文件的绝对路径:

[root@ceshi202 elasticsearch-2.3.3]# ./bin/plugin installfile:/opt/elasticsearch-2.3.3/elasticsearch-sql-2.3.3.0.zip
-> Installing from file:/opt/elasticsearch-2.3.3/elasticsearch-sql-2.3.3.0.zip...
Trying file:/opt/elasticsearch-2.3.3/elasticsearch-sql-2.3.3.0.zip ...
Downloading .......................................DONE
Verifying file:/opt/elasticsearch-2.3.3/elasticsearch-sql-2.3.3.0.zipchecksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed sql into /opt/elasticsearch-2.3.3/plugins/sql
[root@ceshi202 elasticsearch-2.3.3]#

安装结束后,需要重新启动Elasticsearch服务,不然在搜索的时候会有下面的报错:

Invalid index name [sql], must not start with '']; ","status":400}.

我的报错如下:

分享一款Elasticsearch-SQL插件--使用SQL语法查询Elasticsearch


基本用法

不同Elasticsearch版本的使用方法不同,1.x / 2.x的方法相似,5.x的使用方法比较特殊,

在elasticsearch 1.x / 2.x上,从浏览器访问:

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

打开页面如下:

分享一款Elasticsearch-SQL插件--使用SQL语法查询Elasticsearch


基本查询

打开页面的SQL Query中是最基本的查询,将"SELECT * FROM myindex"中的myindex改成你的Elasticsearch中索引的名字就可以进行搜索:

分享一款Elasticsearch-SQL插件--使用SQL语法查询Elasticsearch

同时可增加搜索条件:

SELECT common,page FROM myindex where common.channel = "AppStore" and page.duration > 5000 limit 10

在搜索index时可以使用"*"来同时搜索多个索引:

SELECT common,page FROM myindex-* where common.channel = "AppStore" and page.duration > 5000 limit 10

可以做基本的统计

Select COUNT(*),SUM(page.duration),MIN(page.duration) as m, MAX(page.duration),AVG(page.duration) FROM myindex-* GROUP BY common.device_id ORDER BY SUM(page.duration), m DESC

也可以使用Elasticsearch自带的一些函数做matchQuery、聚合(Aggregations)、地理位置(Geographic)等。


Elasticsearch的查询语言(DSL)不太好写,偏偏查询的功能千奇百怪,不管是通过封装JSON还是通过python/java的api进行封装,都非常不方便。而Elasticsearch-SQL这个插件可以用sql查询Elasticsearch,整体还是很方便的,建议大家使用。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

分享一款Elasticsearch-SQL插件--使用SQL语法查询Elasticsearch

推荐阅读