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

Elasticsearch Sql 查询

文章目录

      • 一、前言
      • 二、SQL 查询测试
        • 分页 limit:
        • order by 排序:
        • group by 分组:
        • SUM 求和:
        • where:
        • 时间转换为 `yyyy-mm-dd` 格式:
        • 时间加减:
        • 字符串拆分:

一、前言

  ElasticSearch 从 6.3.0 版本也开始支持 SQL 查询了。在早期版本中,Elasticsearch 执行 SQL 的 REST 接口为_xpack/sql,但在版本 7 以后这个接口已经被废止而推荐使用 _sql 接口。

  Elasticsearch 支持传统关系型数据库 SQL 语句中的查询语句,但并不支持DML、DCL 句。换句话说,它只支持 SELECT 语句,不支持 INSERT、UPDATE、DELETE语句。SELECT 语句以外,Elaticsarch 还支持 DESCRIBE 和 SHOW 语句。

  下面是官方的文档和介绍,大家可以看看 https://www.elastic.co/guide/en/elasticsearch/reference/8.9/sql-overview.html

在这里插入图片描述

二、SQL 查询测试

  创建一个索引 my_index

PUT /my_index
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "category": { "type": "keyword" },
      "price": { "type": "float" }
    }
  }
}

  插入一些数据:

POST /my_index/_doc/1
{
  "title": "ES学习手册",
  "category": "books",
  "price": 29.99
}

POST /my_index/_doc/2
{
  "title": "on my way",
  "category": "music",
  "price": 13.57
}

POST /my_index/_doc/3
{
  "title": "Kibana中文笔记",
  "category": "books",
  "price": 21.54
}

  传统的查询所有:GET /my_index/_search

在这里插入图片描述
  用 sql 查询,返回的是类似数据库的表格形式:

POST /_sql?format=txt
{
  "query": "SELECT * FROM my_index"
}

在这里插入图片描述

分页 limit:
POST /_sql?format=txt
{
  "query": "SELECT * FROM my_index limit 1"
}

在这里插入图片描述

order by 排序:
POST /_sql?format=txt
{
  "query": "SELECT * FROM my_index order by price desc"
}

在这里插入图片描述

group by 分组:
POST /_sql?format=txt
{
  "query": "SELECT category,count(1) FROM my_index group by category"
}

在这里插入图片描述

SUM 求和:
POST /_sql?format=txt
{
  "query": "SELECT sum(price) FROM my_index"
}

在这里插入图片描述

where:
POST /_sql?format=txt
{
  "query": "SELECT * FROM my_index where price = '13.57'"
}

在这里插入图片描述

  时间转换的处理:先插入一些数据

POST /my_index/_doc/4
{
  "title": "JAVA编程思想",
  "category": "books",
  "price": 21.54,
  "create_date":"2023-11-18T12:00:00.123"
}

POST /my_index/_doc/5
{
  "title": "Mysql操作手册",
  "category": "books",
  "price": 21.54,
  "create_date":"2023-11-17T07:00:00.123"
}
时间转换为 yyyy-mm-dd 格式:
POST /_sql?format=txt
{"query": "SELECT title, DATETIME_FORMAT(create_date, 'YYYY-MM-dd') date from my_index where category= 'books'" }

在这里插入图片描述

时间加减:
POST /_sql?format=txt
{"query": "SELECT date_add('hour', 8,create_date) date from my_index where category= 'books'" }

在这里插入图片描述

字符串拆分:
POST /_sql?format=txt
{
  "query": "SELECT SUBSTRING(category, 1, 3) AS SubstringValue FROM my_index"
}

在这里插入图片描述

参考:像MySQL一样查询ES,困扰多年的问题终于解决了

相关文章:

  • 深入理解 RLP 编码与 JSON:原理、应用与比较
  • ubuntu20.04安装完显卡驱动后黑屏问题
  • 【秣厉科技】LabVIEW工具包——OpenCV 教程(6):dnn实战之YOLO模型推理
  • 上线后bug常见问题及解决建议
  • CSS中height使用100%和100vh的区别
  • 百度BOS学习
  • NFS共享搭建
  • Linux系统docker部署Ollama本地大模型及部署Hugging Face开源模型,ollama相关注意点,非ollama模型创建,模型量化,显存建议
  • 高考志愿填报管理系统基于Spring Boot SSM
  • 使用 .NET Core 的本地 DeepSeek-R1
  • 高级java每日一道面试题-2025年3月07日-微服务篇[Eureka篇]-Eureka Server和Eureka Client关系?
  • Web-Machine-N7靶机实战攻略
  • Java面试第十三山!《设计模式》
  • curl使用报错error LNK2001: 无法解析的外部符号 __imp__CertCloseStore@8
  • Django之旅:第三节--templates模版的使用
  • 使用netDxf扩充LaserGRBL使它支持Dxf文件格式
  • Python——无法激活 “Pylance“ 扩展, 因为它依赖于未加载的 “Python“ 扩展。是否要重新加载窗口以加载扩展名?
  • RK3568平台设备树文件功能解析(鸿蒙系统篇)
  • npm 安装 pnpm 的详细步骤及注意事项
  • Kali Linux汉化教程:轻松设置中文界面
  • 图集|俄罗斯举行纪念苏联伟大卫国战争胜利80周年阅兵式
  • 重视体重管理,筑牢健康基石
  • A股三大股指低收:银行股再度走强,两市成交11920亿元
  • 人民时评:透过上海车展读懂三组密码
  • “上海之帆”巡展在日本大阪开幕,松江区组织企业集体出展
  • 国防部:奉劝有关国家不要引狼入室,甘当棋子