使用SQL语句查询Elasticsearch索引数据

摘要:
Elasticsearch的官方查询语言是QueryDSL。毕竟,存在是有原因的。Elasticsearch SQL不是官方的Elasticsearch。它是NLPChina开源的ES插件。其主要功能是通过SQL查询ES。事实上,它的底层功能是解释SQL,将SQL转换为DSL语法,然后通过DSL进行查询。

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

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

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

安装插件

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

因为elasticsearch使用的是6.2.4的版本,所以插件也要使用相同版本的,具体可以在github网址上查看

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

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

完成此操作后,需要重新启动Elasticsearch服务器,否则会报错:Invalid index name [sql], must not start with '']; ","status":400}

前端可视化界面

Elasticsearch-SQL 插件提供了可视化的界面,方便你执行SQL查询

而在 elasticsearch 5.x/6.x,这需要安装 node.js 和下载及解压site,然后像这样启动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 site-server
# 需要事先安装好nodejs
npm install express --save 
node node-server.js  # 可以通过查看下面的后台运行命令使用

# 端口被占用的话修改端口号
# 后台启动

# 浏览器访问:http://ip:8080进行访问

# 右上角为es的地址和端口,最后的/不能省略

# 可以把es地址配置一个域名,用nginx反向代理一下,以后连接的话使用域名,不直接使用ip:port了,这个有待测试

使用SQL语句查询Elasticsearch索引数据第1张

使用SQL语句查询Elasticsearch索引数据第2张

问题:

  1. 端口号被占用

默认端口是8080,需要修改的话可以改site-server/site_configuration.json文件

{
   "port":8880
}
  1. 如果使用了X-Pack,那么还涉及到用户名密码等问题。参考以下配置:
    修改ES配置文件/etc/elasticsearch/elasticsearch.yml,增加以下几行:
http.cors.enabled: true
http.cors.allow-credentials: true
http.cors.allow-origin: "/.*/"
http.cors.allow-headers: WWW-Authenticate,X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization

重启集群
访问elasticsearch-sql的site时,带上用户名、密码、ES的地址作为参数,例如:http://es-sql-site:8080/?username=hello&password=o11eh&base_uri=http://es:9200

未正确配置ES的地址:

Error: "<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /_sql</pre>
</body>
</html>
"
  1. elasticsearch.yml中未正确配置http.cors:
报错提示:
Error: Error occured! response is not avalible.

解决办法:
找到config文件夹下的elasticsearch.yml,在文件的末尾添加如下内容:
http.cors.enabled: true
http.cors.allow-origin: "*"
  1. 用户名或密码错误:
Error: {"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication token for REST request [/_sql]","header":{"WWW-Authenticate":"Basic realm="security" charset="UTF-8""}}],"type":"security_exception","reason":"missing authentication token for REST request [/_sql]","header":{"WWW-Authenticate":"Basic realm="security" charset="UTF-8""}},"status":401} 
  1. 问题:若是连接其他主机的es进行查询,会报错:
    {"error":"Incorrect HTTP method for uri [/_sql] and method [POST], allowed: [DELETE, HEAD, GET, PUT]","status":405}

不知道是不是不能连接其他主机还是其他主机创建的索引有问题,还有待研究!

  1. web页面右上角文本框中连接地址为es节点查询地址, 该地址最后一定得是/才行

  2. nodejs程序后台运行

# 安装forever
npm install -g forever
# 启动
forever start node-server.js    //node-server.js 是你要启动的js文件
# 查看
forever list    //会列出forever正在运行的服务脚本
# 停止
forever stop index.js   //停止服务运行
# 获取帮助信息
forever --help
使用方式
查询方式1:
直接在浏览器中输入sql查询语句
http://192.168.0.254:9200/_sql?sql=SELECT * FROM rforder-idx limit 6

查询方式2:
使用web界面,输入sql查询语句
http://192.168.0.254:8880/

查询方式3:
使用谷歌浏览器插件
https://github.com/shi-yuan/elasticsearch-sql-site-chrome

免责声明:文章转载自《使用SQL语句查询Elasticsearch索引数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇常用css3属性的ie兼容查看信创.国产-数据库工程师培训专题(达梦+人大金仓+TiDB)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用hive访问elasticsearch的数据

使用hive访问elasticsearch的数据 1.配置 将elasticsearch-hadoop-2.1.1.jar拷贝到hive/lib hive -hiveconf hive.aux.jars.path=/usr/local/hive-1.2.1/lib/elasticsearch-hadoop-2.1.1.jar 或者配置: hive-s...

docker安装启动es

docker安装es和kibana docker pull elasticsearch:7.4.2 docker pull kibana:7.4.2 创建映射文件夹(并写入配置) mkdir -p /kaka-data/elasticsearch/config mkdir -p /kaka-data/elasticsearch/data 代表es可以被远程...

prometheus监控elasticsearch

prometheus监控es,同样采用exporter的方案。 项目地址: elasticsearch_exporter:https://github.com/justwatchcom/elasticsearch_exporter 1、安装部署 现有es三节点的集群,环境大概如下: 主机 组件 192.168.75.11 prometheus...

Elasticsearch 6.2.3版本 执行聚合报错 Fielddata is disabled on text fields by default

背景说明 执行《Elasticsearch 权威指南》的示例,在执行聚合查询的时候,报错 Fielddata is disabled on text fields by default. 1)聚合语句如下: GET _search { "aggs": { "all_interests": { "terms": { "fiel...

elasticsearch 修改changeme passwd

误删.sercurty索引 或者忘记密码 创建一个基于本地认证的超级管理员 以下示例将一个新用户添加my_user 。该用户的密码为my_user ,并且该用户与superuserg角色 bin/elasticsearch-users useradd myuser -p myuser -r superuser 启动elasticsearch服务 通过a...

elasticsearch之python备份

一:elasticsearch原理 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,...