ITPub博客

首页 > 数据库 > 数据库开发技术 > 像MySQL一样查询Elasticsearch,简单易懂,轻松上手

像MySQL一样查询Elasticsearch,简单易懂,轻松上手

原创 数据库开发技术 作者:IT枫斗者 时间:2024-11-02 18:00:00 0 删除 编辑



01

简介



Elasticsearch 是当前最流行的搜索引擎,具有快速查询和优秀的性能。尽管如此,许多用户反映其查询语法 Query DSL(领域特定语言)难以掌握。今天,我将分享一种使用 SQL 查询 Elasticsearch 的方法。

例如,下面是一个 Elasticsearch 的查询示例:

GET /my_index/_search{  "query": {    "bool": {      "must": [        { "match": { "title": "example" } },        {          "bool": {            "should": [              { "term": { "category": "electronics" } },              { "term": { "category": "gadgets" } }            ]          }        }      ],      "filter": {        "range": {          "price": { "gte": 30, "lte": 150 }        }      }    }  },  "aggs": {    "average_price_per_category": {      "terms": {        "field": "category",        "size": 5      },      "aggs": {        "average_price": {          "avg": {            "field": "price"          }        }      }    }  }}


这个查询使用了 bool 查询来组合多个条件,包括 must、should 和 filter。同时,它也包含了聚合(aggs)来计算不同类别的平均价格。对于业务查询来说,这种方式有点复杂,尤其是对新手来说容易出错。

相比之下,使用 MySQL 查询则显得简洁明了:

SELECT title, category, price FROM my_index WHERE title = 'example' AND (category = 'electronics' OR category = 'gadgets') AND price BETWEEN 30 AND 150 GROUP BY category ORDER BY AVG(price) DESC LIMIT 5;


MySQL 的查询语法直观且易于理解,这使得后续维护变得更加简单。为了提高用户体验,Elasticsearch 从 6.3.0 版本开始支持 SQL 查询,这无疑是个好消息。




02

准备环境



首先,下载并安装 Elasticsearch,确保运行环境为 JDK,版本需要在 6.3.0 以上。建议同时下载 Kibana,方便后续操作。




03

实操步骤



创建索引


创建一个索引 my_index:

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




插入数据


插入一些示例数据:

POST /my_index/_doc/1{  "title": "Elasticsearch Guide",  "category": "electronics",  "price": 99.99}
POST /my_index/_doc/2{ "title": "Smart Gadget", "category": "gadgets", "price": 45.00}
POST /my_index/_doc/3{ "title": "Kibana Insights", "category": "electronics", "price": 75.50}




查询所有数据


使用 DSL 查询所有数据:

GET /my_index/_search{  }




使用 SQL 查询


通过 SQL 语法查询数据:

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

返回结果类似数据库表格形式,显得更为清晰。








常见 SQL 查询示例

分页查询

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

排序查询

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

分组查询

POST /_sql?format=txt{  "query": "SELECT category, COUNT(1) FROM my_index GROUP BY category"}

求和查询

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

条件查询

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




处理时间字段


插入带时间数据的记录:

POST /my_index/_doc/4{  "title": "Advanced Elasticsearch",  "category": "electronics",  "price": 60.00,  "create_date": "2023-11-01T12:00:00.123"}

进行时间格式化查询:

POST /_sql?format=txt{  "query": "SELECT title, DATETIME_FORMAT(create_date, 'YYYY-MM-dd') AS date FROM my_index WHERE category = 'electronics'"}




字符串操作


字符串拆分示例:

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



04

总结



使用 Elasticsearch SQL 查询的优点包括:

简单易学:熟悉 SQL 的开发人员可以轻松上手。
易于使用:相比 Query DSL,SQL 语法更加直观。
可读性强:SQL 查询结构清晰,便于理解。




05

相关链接




Elasticsearch 官方下载:

https://www.elastic.co/cn/downloads


Elasticsearch SQL 文档:

https://www.elastic.co/guide/en/elasticsearch/reference/8.9/sql-overview.html




👋 大家好,我是枫哥,一名Java后端开发者!我热衷于探索新技术,并在我的微信公众号上分享关于Java 生态和后端开发的知识。欢迎关注我的公众号,期待与你一起探讨技术的无穷可能!” 目前专注于Java技术分享,覆盖春招、秋招、社招和跳槽相关内容,并提供一对一带徒学习服务。加入 学徒计划,即可享受内推机会和优质资源,签订协议确保就业无忧。此外,我们还推出了‘Java跳槽网’, 为你的求职之路提供全方位支持,助你快速找到理想工作!





- End -




原文作者:IT枫斗者;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
大家好,我是枫哥,🌟阿里云技术专家、📝资深面试官、🌹Java跳蚤网课堂创始人。技术交流vx:itfdz666,拥有多年一线研发经验,曾就职过科大讯飞、美团网、平安等公司。看面试实战视频可以关注b站号:IT枫斗者–Java面试。需要看技术文章,可以关注CSDN:IT枫斗者。

注册时间:2020-05-13

  • 博文量
    183
  • 访问量
    81344