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

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,困扰多年的问题终于解决了


http://www.kler.cn/a/594844.html

相关文章:

  • 尚硅谷爬虫(解析_xpath的基本使用)笔记
  • 大模型的应用与微调:如何调用 LLM?从 OpenAI API 到本地部署
  • Linux 安全与存储管理指南
  • 腾讯云大模型知识引擎×DeepSeek:股票分析低代码应用实践
  • let const var 底层区域别,es6还有AO 对象和GO对象吗
  • rust学习笔记17-异常处理
  • Redis 管道(Pipeline)深度解析:原理、场景与实战
  • 多包管理工具
  • 删除菜品接口
  • 软考高级信息系统管理工程师通关100题(21-40)附记忆口诀
  • 支持向量机SVM的MATLAB分类预测实现
  • 华为IPD研发管理体系的3大核心框架解析
  • HOW - 平时如何保持学习和成长?
  • vscode/windsurf/trae无法识别junit的@Test注解解决办法
  • 如何在 C++ 中运行 DeepSeek R1 LLM
  • AES 简介 以及 C# 和 js 实现【加密知多少系列_3】
  • 用PaddleNLP为GPT-2模型制作FineWeb二进制预训练数据集
  • 【总结】常用API架构类型
  • R语言绘图:小提琴图
  • redis的lua脚本