带你读《Elastic Stack 实战手册》之61:——3.5.17.Elasticsearch SQL (3)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《Elastic Stack 实战手册》之61:——3.5.17.Elasticsearch SQL (3)


《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.17.Elasticsearch SQL (2) https://developer.aliyun.com/article/1227076



3. 基础查询

 

下面的基础查询,默认在 Kibana 中操作。

 

3. 基础查询

 

下面的基础查询,默认在 Kibana 中操作。

 

3.1 简单示例

 

 1)SHOW TABLES, 获取集群的所有索引,包含别名信息

image.png

2)SHOW COLUMNS IN test_logs,查看索引 test_logs 的字段信息(语句 DESC test_logs作用相同)


POST _sql?format=txt
{
  "query":"SHOW COLUMNS IN test_logs"
}
POST _sql?format=txt
{
  "query":"DESC test_logs"
}

image.png

image.png

3)SHOW FUNCTIONS, 查看当前支持的函数

 

POST _sql?format=txt
{
  "query":"SHOW FUNCTIONS"
}
      name       |     type      
-----------------+---------------
AVG              |AGGREGATE      
COUNT            |AGGREGATE      
FIRST            |AGGREGATE      
FIRST_VALUE      |AGGREGATE      
LAST             |AGGREGATE
...              |...

4)SELECT FROM,获取索引中的部分数据

POST _sql?format=txt
{
  "query":"""
SELECT clientip, host, response 
  FROM test_logs 
    ORDER BY timestamp 
    DESC LIMIT 3
  """
}
   clientip    |           host            |   response    
---------------+---------------------------+---------------
118.151.35.151 |artifacts.elastic.co       |200            
99.76.103.49   |artifacts.elastic.co       |200            
41.77.243.255  |elastic-elastic-elastic.org|200            

上面通过4条语句,简单介绍了 Elasticsearch SQL 的基本查询,接下来将介绍更多的实用技巧。

 

3.2 全文搜索

 

Elasticsearch 的全文检索功能,在 Ealsticsearch SQL 中可以通过两个函数实现: match,

query。

 

1)WHERE MATCH,实现全文搜索,效果同 mulit_match

 

# 查询 url 字段中包含 metricbeat的文档, score()函数返回相关性评分
POST _sql?format=txt
{
  "query":"""
    SELECT SCORE(), clientip, host, response 
    FROM test_logs 
    WHERE MATCH(url, 'metricbeat') 
    ORDER BY timestamp 
    DESC LIMIT 3
     """
}
    SCORE()    |   clientip    |        host        |   response    
---------------+---------------+--------------------+---------------
2.7142088      |74.184.0.64    |artifacts.elastic.co|200            
2.7142088      |232.20.97.5    |artifacts.elastic.co|200            
2.7142088      |9.16.178.89    |artifacts.elastic.co|404    

2)WHERE QUERY,实现全文搜索,效果同 query_string

POST _sql?format=txt
{
  "query":"""
    SELECT SCORE(), clientip, host, response 
    FROM test_logs 
    WHERE QUERY('url:metricbeat') 
    ORDER BY timestamp 
    DESC LIMIT 3
  """
}
    SCORE()    |   clientip    |        host        |   response    
---------------+---------------+--------------------+---------------
2.7142088      |74.184.0.64    |artifacts.elastic.co|200            
2.7142088      |232.20.97.5    |artifacts.elastic.co|200            
2.7142088      |9.16.178.89    |artifacts.elastic.co|404            

3.3 深层分页

 

实际使用过程中,一般全文搜索后,会得到的大量返回文档,经常需要分页展示。在Elasticsearch DSL 中我们一般会使用 from + size / scroll / search_after 等方式来实现,Elasticsearch SQL 中存在 fetch_size ,指定当前查询返回的文档数量,用于实现分页功能。Elasticsearch SQL 中 fetch_size,可以类比为 Elasticsearch DSL 中的 scroll(游标)。


1)第1次查询,指定 fetch_size = 10,表示获取 test_logs 中的 10 个文档,如果返回值中有 cursor,表示还有更多满足条件的文档

 

POST _sql?format=json
{
  "query":"""
    SELECT clientip, host, response 
    FROM test_logs 
    ORDER BY timestamp DESC
  """,
   "fetch_size": 10
}
{
  "columns" : [
    {
      "name" : "clientip",
      "type" : "ip"
    },
    {
      "name" : "host",
      "type" : "text"
    },
    {
      "name" : "response",
      "type" : "text"
    }
  ],
  "rows" : [
    [
      "118.151.35.151",
      "artifacts.elastic.co",
    1270         >   三、产品能力
      "200"
    ]
    ...
  ],
  "cursor" : "g+azAwFaAXN...="
}

2)第2次查询,只需要添加前一次的 cursor

POST /_sql?format=json
{
 "cursor" : "g+azAwFaAXN...="
}
{
  "rows" : [
    [
      "41.77.243.255",
      "elastic-elastic-elastic.org",
      "200"
    ],
    ...
    ],
  "cursor" : "g+azAwFaAXN4Rk...="
}

3)最后一次查询,返回结果中将不存在 cursor ,表示已经到了最后一页

POST /_sql?format=json
{
  "cursor": "g+azAwFaAXN4Rk...="
}
{
  "columns" : [
    {
      "name" : "clientip",
      "type" : "ip"
    },
    {
      "name" : "host",
      "type" : "text"
    },
    {
      "name" : "response",
      "type" : "text"
    }
  ],
  "rows" : [
    [
      "118.151.35.151",
      "artifacts.elastic.co",
      "200"
    ]
  ]
}


需要注意的是

 

1、如果查询指定返回结构是 txt / csv 等,将无法获取到 carsor;

2、如果查询语句中包含有 LIMIT,fetch_size 将无法工作,即无法分页。


《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.17.Elasticsearch SQL (4) https://developer.aliyun.com/article/1227074

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何在SQL语句里使用CASE WHEN语句
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
297 2
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之相同的SQL语句在不同时间执行EXPLAIN计划显示出不同的索引类型,是什么原因
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
PolarDB产品使用问题之相同的SQL语句在不同时间执行EXPLAIN计划显示出不同的索引类型,是什么原因
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之未保存的ODPS SQL语句该如何找回
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
103 2
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之遇到慢SQL问题,该如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
SQL 弹性计算 资源调度
云服务器 ECS产品使用问题之bin/spark-sql --master yarn如何进行集群模式运行
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之sql运行报错是神么原因
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
SQL 关系型数据库 Serverless
PolarDB产品使用问题之如何控制队列中排队的SQL的等待时间
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之出现部分SQL抛出7543错误,该如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
SQL 缓存 关系型数据库
PolarDB产品使用问题之SQL语句是否可以参数化
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之将RDS切换到PolarDB-X 2.0时,代码层的SQL该如何改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。

相关产品

  • 检索分析服务 Elasticsearch版