Elasticsearch SQL

Elasticsearch SQL允许执行类SQL的查询,可以使用REST接口、命令行或者是JDBC,都可以使用SQL来进行数据的检索和数据的聚合。
Elasticsearch SQL特点:
本地集成
    Elasticsearch SQL是专门为Elasticsearch构建的。每个SQL查询都根据底层存储对相关节点有效执行。
没有额外的要求
    不依赖其他的硬件、进程、运行时库,Elasticsearch SQL可以直接运行在Elasticsearch集群上
轻量且高效
    像SQL那样简洁、高效地完成查询
1、SQL与Elasticsearch对应关系
SQL
Elasticsearch
column(列)
field(字段)
row(行)
document(文档)
table(表)
index(索引)
schema(模式)
mapping(映射)
database server(数据库服务器)
Elasticsearch集群实例
2、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只支持单表
3、职位查询案例
 
3.1、查询职位索引库中的一条数据
ormat:表示指定返回的数据类型
//1.查询职位信息

GET /_sql?format=txt
{
"query":"SELECT * FROM es_db limit 1"
}
除了txt类型,Elasticsearch SQL还支持以下类型
格式
描述
csv
逗号分隔符
json
JSON格式
tsv
制表符分隔符
txt
类cli表示
yaml
YAML人类可读的格式
 
3.2、将SQL转换为DSL
GET /_sql/translate
{
"query":"SELECT * FROM es_db limit 1"
}
结果如下:
{
  "size" : 1,
  "_source" : {
    "includes" : [
      "age",
      "remark",
      "sex"
    ],
    "excludes" : [ ]
  },
  "docvalue_fields" : [
    {
      "field" : "address"
    },
    {
      "field" : "book"
    },
    {
      "field" : "name"
    }
  ],
  "sort" : [
    {
      "_doc" : {
        "order" : "asc"
      }
    }
  ]
}
3.4、职位全文检索
 
3.4.1、需求
检索address包含广州和name中包含张三的用户。
 
3.4.2、MATCH函数
在执行全文检索时,需要使用到MATCH函数。
MATCH(
    field_exp,   
    constant_exp 
    [, options]) 
field_exp:匹配字段
constant_exp:匹配常量表达式
 
3.4.3、实现
GET /_sql?format=txt
{
"query":"select * from es_db where MATCH(address, '广州') or MATCH(name, '张三') limit 10"
}

 

4.4、通过Elasticsearch SQL方式实现分组统计
 
4.4.2、基于Elasticsearch SQL方式实现
GET /_sql?format=txt
{
"query":"select age, count(*) as age_cnt from es_db group by age"
}
这种方式要更加直观、简洁。

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

 

 
 
 
 
 
 
 
 
 
 
 
posted @ 2022-04-10 20:27  VNone  阅读(334)  评论(0)    收藏  举报