当前位置: 首页 > news >正文

elasticsearch SQL:在Elasticsearch中启用和使用SQL功能

❃博主首页 : 「码到三十五」 ,同名公众号 :「码到三十五」,wx号 : 「liwu0213」
☠博主专栏 : <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关>
♝博主的话 : 搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,一起筑基

目录

      • 一、基本概念
      • 二、主要功能和优势
        • Elasticsearch SQL特点
      • 三、启用和使用SQL功能
      • 四、Elasticsearch SQL的使用
        • 4.1 语法
        • 4.2 sql查询
        • 4.3 将SQL转换为DSL
        • 4.4 全文检索
          • MATCH函数
          • QUERY()
        • 4.5 分组统计
        • 4.6 DESCRIBE
        • 4.7 SHOW TABLES
        • 4.8 查询支持的函数
      • 五、适用场景及潜在限制

一、基本概念

Elasticsearch是一个基于Lucene的开源、分布式、RESTful搜索引擎。它提供了全文搜索、结构化搜索、分析以及分布式索引等功能。Elasticsearch SQL是Elasticsearch的扩展功能,允许用户使用SQL语法查询Elasticsearch数据。通过SQL接口,开发者可以利用熟悉的SQL语言,编写更直观、更易懂的查询,并且避免对大量复杂的原生REST请求的编写。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EupnvsbF-1721093861434)(https://i-blog.csdnimg.cn/direct/9e79724515584560a3ec575d33f54904.jpeg#pic_center)]

二、主要功能和优势

  1. 易用性:使用熟悉的SQL语法,降低了学习成本。
  2. 灵活性:支持复杂的查询和聚合操作。
  3. 性能:Elasticsearch本身的分布式架构和高效查询引擎保证了查询性能。
  4. 集成性:通过JDBC驱动,可以与各种SQL工具和应用程序集成。
Elasticsearch SQL特点

1. 本地集成
Elasticsearch SQL是专门为Elasticsearch构建的。每个SQL查询都根据底层存储对相关节点有效执行。
2. 没有额外的要求
不依赖其他的硬件、进程、运行时库,Elasticsearch SQL可以直接运行在Elasticsearch集群上
3. 轻量且高效
像SQL那样简洁、高效地完成查询

三、启用和使用SQL功能

要在Elasticsearch中启用和使用SQL功能,你需要安装X-Pack插件。X-Pack插件包含了许多扩展功能,包括SQL接口。安装完成后,需要在Elasticsearch配置文件中启用X-Pack插件,并重启Elasticsearch服务。

# 安装X-Pack插件
./bin/elasticsearch-plugin install x-pack# 启用X-Pack插件
# 在elasticsearch.yml配置文件中添加以下配置
xpack.sql.enabled: true

在启用SQL功能后,你可以通过REST API、命令行工具或JDBC驱动来执行SQL查询。Elasticsearch SQL的语法与标准的SQL语法非常相似,支持SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY等常见SQL语句。

四、Elasticsearch SQL的使用

4.1 语法
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 ] [, ...] ) ) ]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZN8DC9ek-1721093861436)(https://i-blog.csdnimg.cn/direct/9dd378cca9294abcb6cecd3b49c3114a.png)]
目前FROM只支持单表

4.2 sql查询
# 使用curl命令查询
curl -X GET "localhost:9200/_sql?format=txt" -H 'Content-Type: application/json' -d'
{"query": "SELECT * FROM indexName WHERE age > 30"
}'

format=txt 是指查询返回结果的数据格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i4AKhlnx-1721093861437)(https://i-blog.csdnimg.cn/direct/287895433292497ca6392411edf7ddff.png)]

4.3 将SQL转换为DSL
GET /_sql/translate
{
"query":"SELECT * FROM es_order limit 1"
}

结果如下:

{"size" : 1,"_source" : {"includes" : ["id","orderNo","orderTime"],"excludes" : [ ]},"docvalue_fields" : [{"field" : "id"},{"field" : "orderNo"},{"field" : "orderTime"}],"sort" : [{"_doc" : {"order" : "asc"}}]
}
4.4 全文检索

当使用MATCH或QUERY函数时,会启用全文搜索功能,SCORE函数可以用来统计搜索评分。

MATCH函数
MATCH(field_exp,   constant_exp [, options]) 
field_exp:匹配字段
constant_exp:匹配常量表达式

用法:

GET /_sql?format=txt
{
"query":"select * from es_order where MATCH(address, '武汉') or MATCH(productType, '手机') limit 10"
}
QUERY()

使用QUERY函数查询address中包含Street的记录。

POST /_sql?format=txt
{
"query":"select id,orderNo,name,address,SCORE()  from es_order where QUERY('address: 武汉') limit 10"
}
4.5 分组统计
GET /_sql?format=txt
{
"query":"select city, count(*) as age_cnt from es_order group by city"
}

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

HAVING
我们可以使用HAVING语句对分组数据进行二次筛选,比如筛选分组记录数量大于1000的信息,查询语句如下。

POST /_sql?format=txt
{"query":"select city, count(*) as age_cnt from es_order group by city having count(*) > 1000"
}

ORDER BY
使用ORDER BY语句对数据进行排序,比如按照统计字段从高到低排序,查询语句如下。

POST /_sql?format=txt
{"query":"select city, count(*) cc as age_cnt from es_order group by city having count(*) > 1000 order by cc "
}

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

4.6 DESCRIBE

使用DESCRIBE语句查看索引中有哪些字段,比如查看es_order索引的字段,查询语句如下。

POST /_sql?format=txt
{"query": "DESCRIBE es_order"
}
4.7 SHOW TABLES

使用SHOW TABLES查看所有的索引

POST /_sql?format=txt
{"query": "SHOW TABLES"
}
4.8 查询支持的函数

使用SQL查询ES中的数据,不仅可以使用一些SQL中的函数,还可以使用一些ES中特有的函数。SHOW FUNCTIONS语句查看所有支持的函数,比如搜索所有带有DATE字段的函数可以使用如下语句。

POST /_sql?format=txt
{"query": "SHOW FUNCTIONS LIKE '%DATE%'"
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eC2dU8qP-1721093861439)(https://i-blog.csdnimg.cn/direct/eed4483e4e4f4e43bdb5709b7d35b178.png)]

五、适用场景及潜在限制

Elasticsearch SQL适用于需要对大量数据进行复杂查询的场景,如数据分析、报表生成、数据探索等。然而,由于SQL查询的复杂性,它可能不适用于所有场景。例如,对于需要高并发、低延迟的场景,原生REST查询可能更合适。

此外,虽然Elasticsearch SQL提供了SQL接口,但它并不是完全兼容SQL。例如,它不支持所有的SQL函数和特性。因此,在使用Elasticsearch SQL时,需要了解它的限制,并根据实际情况选择使用。

总结来说,Elasticsearch SQL提供了一种直观、易用的方式查询Elasticsearch数据。它允许开发者利用熟悉的SQL语言,编写更直观、更易懂的查询,并避免对大量复杂的原生REST请求的编写。然而,它的适用场景和性能特点需要在实际使用中仔细考虑。


关注公众号获取更多技术干货 !

相关文章:

elasticsearch SQL:在Elasticsearch中启用和使用SQL功能

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…...

Java 并发编程:线程变量 ThreadLocal

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 029 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…...

【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】018 - init_sequence_f 各函数源码分析(二)

【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】018 - init_sequence_f 各函数源码分析(二) 一、arch_cpu_init二、arch_cpu_init系列文章汇总:《【OpenHarmony4.1 之 U-Boot 源码深度解析】000 - 文章链接汇总》 本文链接:《【OpenHarmony4.1 之 U-Boot 2024.07源码深度…...

LVS原理——详细介绍

目录 介绍 lvs简介 LVS作用 LVS 的优势与不足 LVS概念与相关术语 LVS的3种工作模式 LVS调度算法 LVS-dr模式 LVS-tun模式 ipvsadm工具使用 实验 nat模式集群部署 实验环境 webserver1配置 webserver2配置 lvs配置 dr模式集群部署 实验环境 router 效果呈现…...

MYSQL 5.7.36 等保 建设记录

文章目录 前言一、开启审计日志1.1 查看当前状态1.2 开启方式1.3 查看开启后状态 二、密码有效期2.1 查看当前状态2.2 开启方式2.3 查看开启后状态 三、密码复杂度3.1 查看当前状态3.2 开启方式3.3 查看开启后状态 四、连接控制4.1 查看当前状态4.2 开启方式4.3 查看开启后状态…...

fatal: unable to access ‘https://github.com/xxxxx

ubuntu中git克隆项目异常 git clone https://github.com/xxx Cloning into ‘xxx’… fatal: unable to access ‘https://github.com/xxx/xx.git/’: Could not resolve host: github.com 解决办法使用命令&#xff1a; git config --global http.proxy git config --global…...

从零开始的CPP(38)——递归与动态规划

leetcode46 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#…...

从战略到系统架构:信息系统设计的全面解析

在当今数字化时代&#xff0c;信息系统已成为企业运营、管理和创新的核心驱动力。信息系统设计的重要性不仅关乎企业的技术实现&#xff0c;更直接影响到企业的战略执行和市场竞争能力。本文将从战略视角出发&#xff0c;深入探讨信息系统设计的全过程&#xff0c;包括从战略制…...

GEE调用中国(China Land Cover Dataset,简称CLCD)1990-2022年30米分辨率的土地分类数据

博客推荐 GEE土地分类&#xff1a;中国30米年度土地覆盖产品annual China Land Cover Dataset, CLCD&#xff08;面积提取&#xff09;_30米土地利用数据gee-CSDN博客 简介 中国陆地覆盖数据集&#xff08;China Land Cover Dataset&#xff0c;简称CLCD&#xff09;是一个用…...

三十八、大数据技术之Kafka(1)

&#x1f33b;&#x1f33b; 目录 一、Kafka 概述1.1 定义1.2 消息队列1.2.1 消息队列内部实现原理1.2.2 传统消息队列的应用场景1.2.3 消息队列的两种模式 1.3 Kafka 基础架构 二、 Kafka 快速入门2.1 安装前的准备2.2 安装部署2.2.1 集群规划2.2.2 单节点或集群部署2.2.3 集群…...

将 Tcpdump 输出内容重定向到 Wireshark

在 Linux 系统中使用 Tcpdump 抓包后分析数据包不是很方便。 通常 Wireshark 比 tcpdump 更容易分析应用层协议。 一般的做法是在远程主机上先使用 tcpdump 抓取数据并写入文件&#xff0c;然后再将文件拷贝到本地工作站上用 Wireshark 分析。 还有一种更高效的方法&#xf…...

【Python蓝屏程序(管理员)】

说明&#xff1a;该程序为临摹(&#x1f600;)作品&#xff0c;源地址C蓝屏程序(非管理员) 我试图使用Python调用 NtRaiseHardError API &#xff0c;实现类似的蓝屏效果。可惜我发现Python在普通权限下&#xff0c;直接调用 NtRaiseHardError API 是不被允许的&#xff0c;因为…...

OpenGL ES->GLSurfaceView绘制图形的流程

自定义View代码 class MyGLSurfaceView(context: Context, attrs: AttributeSet) : GLSurfaceView(context, attrs), GLSurfaceView.Renderer {var mProgrem 0init {// 设置 OpenGL ES 3.0 版本setEGLContextClientVersion(3)// 设置当前类为渲染器, 注册回调接口的实现类set…...

Linux OOM Killer详解

Linux OOM Killer详解 一、概述二、OOM Killer的技术原理1. 内存区域划分2. 内存耗尽与OOM Killer触发3. 选择被杀进程的策略4. 内存回收机制5. 内存分配策略 三、OOM Killer的工作机制1. 内存压力监测2. 触发条件3. 选择被杀进程4. 终止进程 四、实际场景举例场景一&#xff1…...

2024rk(案例二)

试题二(25分) 阅读以下关于数据库缓存的叙述,在答题纸上回答问题1至问题3。 【说明】 某大型电商平台建立了一个在线 B2B 商店系统,并在全国多地建设了货物仓储中心,通过提前备货的方式来提高货物的运送效率。但是在运营过程中,发现会出现很多跨仓储中心调货从而延误货物…...

小红书爆文秘籍:ChatGPT助你从0到1创造热门内容!

在小红书打造爆款文案的策略中&#xff0c;以下是一些调整和同义词替换的建议&#xff0c;以便达到文章去重的要求&#xff1a; 了解目标受众&#xff1a; 在撰写文案前&#xff0c;先深入分析目标读者的属性&#xff0c;如年龄层次、性别、爱好和购买行为。通过ChatGPT, 你能迅…...

django快速实现个人博客(附源码)

文章目录 一、工程目录组织结构二、模型及管理实现1、模型2、admin管理 三、博客展现实现1、视图实现2、模板实现 四、部署及效果五、源代码 Django作为一款成熟的Python Web开发框架提供了丰富的内置功能&#xff0c;如ORM&#xff08;对象关系映射&#xff09;、Admin管理界面…...

K8s部署篇之手动部署二进制高可用集群架构

一、系统环境初始化 一&#xff09;架构设计 所有节点都操作&#xff1a;3个master&#xff08;etcd集群三个节点&#xff09;和2个node 1、K8s服务调用如图 2、各组件说明 1、API Server 供Kubernetes API接口&#xff0c;主要处理 REST操作以及更新ETCD中的对象所有资源增删…...

【Unity/XLua】xlua自带教程示例分析(6)—— lua协程

文章目录 工具准备协程测试 工具准备 首先是工具脚本&#xff0c;一个Coroutine_Runner.cs和一个cs_coroutine.lua 前者定义了一个继承自Monobehavior的脚本组件&#xff0c;后者则使用lua去在Unity中实例化一个挂载该组件的GameObject&#xff0c;并将其设置为DontDestroyOn…...

CV目标检测概述

文章目录 目标检测概述目标检测图像分割目标检测和图像分割的区别 目标检测概述 目标检测和图像分割是计算机视觉中的两个重要任务&#xff0c;它们有着不同的目的和应用。以下是它们的简要介绍和区别&#xff1a; 目标检测 目标检测&#xff08;Object Detection&#xff0…...

从模电理论到商用落地,应届生必做的无线充项目,H 桥 / LC 谐振 + QI 协议全栈详解

很多初学嵌入式的同学、正在准备秋招的电子信息类应届生&#xff0c;都会遇到两个核心困境&#xff1a;一是模电学了 H 桥、LC 谐振&#xff0c;只会背公式做题&#xff0c;根本不知道怎么在真实产品里落地&#xff1b;二是学完单片机只会点灯&#xff0c;写的都是流水账代码&a…...

Transformer 从0到1:注意力机制的数学形式——Query, Key, Value 三元组

# Transformer 从0到1&#xff1a;注意力机制的数学形式——Query, Key, Value 三元组## 1. 引言&#xff1a;从序列建模的困境到注意力机制的诞生在深度学习的发展历程中&#xff0c;处理序列数据&#xff08;如文本、音频、时间序列&#xff09;一直是核心挑战之一。早期的循…...

Python智能内存回收实战:3种GC策略对比+4个生产级调优参数配置(附压测数据)

第一章&#xff1a;Python智能体内存管理策略生产环境部署在高并发、长生命周期的Python智能体服务中&#xff0c;内存管理直接影响系统稳定性与响应延迟。默认的CPython引用计数循环垃圾回收&#xff08;GC&#xff09;机制在动态对象频繁创建销毁的场景下易引发内存抖动和不可…...

别再只会用Arduino了!用ESP8266+MicroPython快速搭建你的第一个物联网小项目(附完整代码)

用MicroPython解锁ESP8266的物联网潜能&#xff1a;10分钟搭建温湿度监测系统 当提到物联网开发时&#xff0c;大多数人的第一反应可能是Arduino和C。但今天&#xff0c;我要带你体验一种更高效、更友好的方式——MicroPython。这种基于Python的嵌入式编程语言&#xff0c;让物…...

Qt5.14.2与VS2019整合开发避坑指南(从安装到第一个GUI项目)

Qt5.14.2与VS2019整合开发避坑指南&#xff08;从安装到第一个GUI项目&#xff09; 在Windows平台进行Qt开发时&#xff0c;Visual Studio作为强大的IDE环境&#xff0c;与Qt框架的结合能够显著提升开发效率。本文将深入剖析Qt5.14.2与VS2019整合过程中的关键环节&#xff0c;从…...

SpringBoot集成TTL实现Feign与线程池的TraceId无缝传递(实战优化版)

1. 问题背景与核心挑战 在分布式系统中&#xff0c;日志链路追踪是排查问题的关键手段。想象一下这样的场景&#xff1a;用户请求从网关进入&#xff0c;经过多个微服务处理&#xff0c;每个服务又可能调用其他服务或使用线程池异步处理。当出现问题时&#xff0c;如何快速定位…...

IDK slgA:无创检测,便捷采样

在人体的防御体系中&#xff0c;免疫系统扮演着至关重要的角色。而其中&#xff0c;黏膜免疫系统则是抵御外界病原体的第一道防线。在众多免疫成分中&#xff0c;分泌型免疫球蛋白A&#xff08;Secretory Immunoglobulin A, 简称sIgA&#xff09;以其独特的功能和广泛的存在形式…...

Qwen3-14B镜像部署避坑指南:RTX 4090D驱动/CUDA/内存精准匹配

Qwen3-14B镜像部署避坑指南&#xff1a;RTX 4090D驱动/CUDA/内存精准匹配 1. 镜像概述与核心优势 Qwen3-14B私有部署镜像是一款专为RTX 4090D显卡优化的开箱即用解决方案。这个镜像最大的特点就是解决了大模型部署中最让人头疼的环境配置问题。 想象一下&#xff0c;你拿到一…...

终极WindowResizer完整指南:让窗口调整随心所欲

终极WindowResizer完整指南&#xff1a;让窗口调整随心所欲 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否遇到过无法调整大小的应用窗口&#xff1f;WindowResizer是一款强…...

ConvNeXt 改进 :ConvNeXt添加可变形卷积(DCNv2,CVPR 2018),实现高效涨点,二次创新CNBlock结构 ,独家首发

本文教的是方法,也给出几种改进方法,二次创新结构,百变不离其宗,一文带你改进自己模型,科研路上少走弯路。 前言 DCNv2对原始的DCNv1进行了改进,可变形卷积网络的卓越性能源于其适应对象几何变化的能力。通过对其自适应行为的检查,虽然对其神经特征的空间支持比常规的Co…...