出自 图灵学院 ElasticSearch课程
我自己学完了,然后给老师的代码和讲义自己练习了一遍,然后整理了一下,做了个笔记

概述

Elasticsearch SQL允许执行类SQL的查询,可以使用REST接口、命令行或者是JDBC,都可以使用SQL来进行数据的检索和数据的聚合。

Elasticsearch SQL特点:

  • 本地集成

Elasticsearch SQL是专门为Elasticsearch构建的。每个SQL查询都根据底层存储对相关节点有效执行。

  • 没有额外的要求

不依赖其他的硬件、进程、运行时库,Elasticsearch SQL可以直接运行在Elasticsearch集群上

  • 轻量且高效

像SQL那样简洁、高效地完成查询

SQL与Elasticsearch对应关系

SQL Elasticsearch
column(列) field(字段)
row(行) document(文档)
table(表) index(索引)
schema(模式) mapping(映射)
database server(数据库服务器) Elasticsearch集群实例

Elasticsearch SQL语法

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

目前FROM只支持单表

Elasticsearch SQL目前的一些限制

目前Elasticsearch SQL还存在一些限制。例如:不支持JOIN、不支持较复杂的子查询。所以,有一些相对复杂一些的功能,还得借助于DSL方式来实现。

另外现在ElasticSearch中 还是dsl语句是主流语句,sql语句在ElasticSearch中不是那么的成熟.

案例

查询职位索引库中的一条数据

format:表示指定返回的数据类型
//1.查询职位信息

GET /_sql
{"query":"SELECT * FROM es_db limit 1"
}

结果

{"columns" : [{"name" : "address","type" : "text"},{"name" : "age","type" : "long"},{"name" : "city","type" : "text"},{"name" : "name","type" : "text"},{"name" : "provice","type" : "text"},{"name" : "remark","type" : "text"},{"name" : "sex","type" : "long"},{"name" : "street","type" : "text"}],"rows" : [["广州荔湾大厦",28,null,"李四",null,"java assistant",1,null]]
}

结果返回表的格式

默认是返回json格式的结果

GET /_sql?format=txt
{"query":"SELECT * FROM es_db limit 1"
}

结果

    address    |      age      |     city      |     name      |    provice    |    remark     |      sex      |    street
---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------
广州荔湾大厦         |28             |null           |李四             |null           |java assistant |1              |null           

除了txt类型,Elasticsearch SQL还支持以下类型,

格式 描述
csv 逗号分隔符
json JSON格式
tsv 制表符分隔符
txt 类cli表示
yaml YAML人类可读的格式

使用tsv格式

GET /_sql?format=tsv
{"query":"SELECT * FROM es_db limit 1"
}

结果

address  age city    name    provice remark  sex street
广州荔湾大厦  28      李四      java assistant  1   

将SQL转换为DSL

将sql转成dsl语句, 这种使用场景是:比如说你MySQL用的非常的6 ,但是你不太会ElasticSearch的dsl语法,那么就可以把你想查询的效果用sql语句写出来,然后再翻译成dsl语句.

输入:

GET /_sql/translate
{"query":"SELECT * FROM es_db where address  = '广州荔湾大厦'"
}

结果:

{"size" : 1000,"query" : {"term" : {"address.keyword" : {"value" : "广州荔湾大厦","boost" : 1.0}}},"_source" : {"includes" : ["address","age","city","name","provice","remark","sex","street"],"excludes" : [ ]},"sort" : [{"_doc" : {"order" : "asc"}}]
}

然后你把翻译的语句跟上 dsl语句的请求地址 比如说: GET /es_db/_search ,这样就可以使用了.

GET /es_db/_search
{"size" : 1000,"query" : {"term" : {"address.keyword" : {"value" : "广州荔湾大厦","boost" : 1.0}}},"_source" : {"includes" : ["address","age","city","name","provice","remark","sex","street"],"excludes" : [ ]},"sort" : [{"_doc" : {"order" : "asc"}}]
}

职位全文检索

检索address包含广州和name中包含张三的用户。

在执行全文检索时,需要使用到MATCH函数。

MATCH(field_exp,   constant_exp [, options])

field_exp:匹配字段
constant_exp:匹配常量表达式

用sql语句可以这么写:

GET /_sql?format=txt
{"query":"select * from es_db where MATCH(address, '广州') or MATCH(name, '张三') limit 10"
}

结果:

    address    |      age      |     city      |     name      |    provice    |    remark     |      sex      |    street
---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------
广州荔湾大厦         |28             |null           |李四             |null           |java assistant |1              |null
广州白云山公园        |26             |null           |rod            |null           |php developer  |0              |null           

通过Elasticsearch SQL方式实现分组统计

输入:

GET /_sql?format=txt
{"query":"select age, count(*) as age_cnt from es_db group by age"
}

结果:

      age      |    age_cnt
---------------+---------------
19             |1
22             |1
25             |1
26             |1
28             |1              

这种方式要更加直观、简洁。

ElasticSearch的sql语法说明和简单使用相关推荐

  1. Access SQL语法(查询/插入/删除/连接/修改)

    SQL语法 1. 查询 简单查询 select 班级,姓名,性别 from 学生名单 加筛选条件 select 班级,姓名,性别 from 学生名单 where 性别="女" 分组 ...

  2. PLY库-实现最简单的sql语法的数据库

    本文通过PLY实现一个简单的sql库 本文主要简述一下,有关语法解析的库的使用,并使用改实例编写一个简单的模仿最基本的sql语句的数据库,本文代码仅供示例参考. 语法解析与上下文 语法解析是一个比较大 ...

  3. Python SQL 语法简单入门

    Python SQL 语法简单入门 大家好,今天给大家分享一些python中基本的sql语法.基本是按照sqlite3 来写的. 引题 为什么要使用数据库? 持久化 ,内存中的变量当程序重启和电脑断电 ...

  4. 使用ANTLR做一个简单的Python SQL语法解析器 - 推酷

    使用ANTLR做一个简单的Python SQL语法解析器 - 推酷 使用ANTLR做一个简单的Python SQL语法解析器 - 推酷 posted on 2016-11-14 13:11 lexus ...

  5. 关系代数和SQL语法

    数据分析的语言接口 OLAP计算引擎是一架机器,而操作这架机器的是编程语言.使用者通过特定语言告诉计算引擎,需要读取哪些数据.以及需要进行什么样的计算.编程语言有很多种,任何人都可以设计出一门编程语言 ...

  6. ORACLE分页查询SQL语法——最高效的分页

    --1:无ORDER BY排序的写法.(效率最高) --(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT *FROM (SELECT ...

  7. orcle与mysql的区别_Orcle与MySQL的SQL语法区别:

    Orcle与MySQL的SQL语法区别: 1.在Oracle中用 select * from all_users显示所有的用户,而在MySQL中显示所有数据 库的命令是 show databases ...

  8. mysql中以下正确的sql是_总结MySQL中SQL语法的使用

    --where子句操作符: where子句操作符 = 等于 <> 不等于(标准语法) != 不等于(非标准语法,可移植性差) < 小于 <= 小于等于 > 大于 > ...

  9. PL/SQL编程基础(一):PL/SQL语法简介(匿名PL/SQL块)

    PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/ ...

最新文章

  1. phpDocument(PHPDoc) 标签大全
  2. 四大技巧轻松搞定云容器
  3. java多线程打印helloworld,Java并发编程--多线程之HelloWorld
  4. PHP|Yii2下通过插件进行图片处理(亲测可用)
  5. KICAD | 分享一个必须安装的插件Interactive HTML BOM plugin for KiCad
  6. then 微信小程序_微信小程序 引入es6 promise
  7. SPH算法(求最小代价树)
  8. 在linux下一般用scp这个命令来通过ssh传输文件
  9. Spring Security——异常信息本地化
  10. [经典好文] 谈笑色影间,人生本无忌 (转于色影无忌)
  11. 单片机制作工具大汇总!!
  12. ExoPlayer+FFMpeg软解
  13. YY淘宝商品数据库设计
  14. 使用teamviewer和向日葵时Visual studio等软件显示全白或者全黑的解决办法!
  15. at命令不生效 linux_linux中at命令详解
  16. 路由之间的转跳及传参
  17. android studio安装apk时,vivo 部分手机出现 解析软件包错误
  18. java计算机毕业设计汽车票订购系统源码+程序+lw文档+mysql数据库
  19. 人工智能全球赛:中国“智能+”要冲浪还缺百万人才
  20. angularjs ng-repeat

热门文章

  1. Ubuntu使用networking服务来管理网络
  2. Python 实现将 Unix 时间戳转化为实际时间
  3. Siemens-PLM-TeamCenter虚拟机安装与配置
  4. c 语言程序的三种基本结构,C 语言程序的三种基本结构是____ A、顺序结构,选择结构,循环结构 B、递归结构,循环结构,转移结构...
  5. 复旦FM17522芯片读写M1卡(S50/S70)、CPU卡要点摘录
  6. mysql数据库+易语言的应用_易语言mysql数据应用源码
  7. 注册会计师考试时可用计算机吗,距离注册会计师考试仅有4天,注意好这9点机考少丢分...
  8. 计算机网络系统集成有哪些方面,计算机网络中系统集成主要包含哪些?
  9. 项目案例:QQ数据库管理
  10. IDC防火墙配置CISCO ASA5520