聊一聊Elasticsearch和MySQL的常用操作
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊一聊Elasticsearch和MySQL的常用操作相关的知识,希望对你有一定的参考价值。
前言
ElasticSearch,开源的搜索和数据分析引擎,也是名列前茅的 nosql。
很多时候会想拿它和关系型数据库做对比,严格上它们是没有太多可比性的。
不过把有的东西放在一起比较,会帮助我们快速去理解一些 ElasticSearch 的内容。
老黄这边抽空梳理了一些常用的 sql 语句 “对应” ElasticSearch 的操作,主要是针对 CURD 的。
示例用的是 mysql 和 ElasticSearch 7.12.0 。
表操作
为了简单起见,弄一个简单的订单表 order-2021
来演示。
删除表
![](https://image.cha138.com/20210626/e5521aad925147528d0b7c2b61cb0e53.jpg)
![](https://image.cha138.com/20210626/d5407ccd909c4d35bbf91d5598371fb6.jpg)
创建表
![](https://image.cha138.com/20210626/e9fa09c962184535a4fecb4065c0ef41.jpg)
![](https://image.cha138.com/20210626/36fd98e9c43647d2aeabdc15e60af0aa.jpg)
NOTE:
mysql 的索引需要一个一个的加,ES 这边不需要。
mysql 有自增 Id, ES 这边也会有自动生成 Id 的操作,同样的,两边也可以自定义 Id。
keyword 和 text 按需调整。
改表名
![](https://image.cha138.com/20210626/7f7bf90c51b642fb8e709bb02f4c0e8d.jpg)
![](https://image.cha138.com/20210626/737b045019f34b0bb2b60bf9890ec64e.jpg)
NOTE: ES 的是起一个别名,然后两个名字都可以用。
插入数据
单条插入
![](https://image.cha138.com/20210626/e826ce5210d24293922646b05378b214.jpg)
![](https://image.cha138.com/20210626/530cd013a60e4513a05cd349c3e8f3c9.jpg)
批量插入
![](https://image.cha138.com/20210626/f8e0ed95fd4f4dab92de6e3801d828bb.jpg)
![](https://image.cha138.com/20210626/810fc2d5685d494d836262af607512e4.jpg)
NOTE:
ES 的批量操作需要注意,每一行最后要有换行符
\\n
结尾Content-Type 指定为 application/x-ndjson
更新数据
根据ID更新
![](https://image.cha138.com/20210626/9cf9407ae0b440e68353c2548451d3d9.jpg)
![](https://image.cha138.com/20210626/c8ec0747444e4abc99e37db1abd0c138.jpg)
根据查询条件更新
![](https://image.cha138.com/20210626/43c5060b7e1f4fa18ab95921b75b4e6b.jpg)
![](https://image.cha138.com/20210626/596354bec40042a08d3b3fd457c9e1a8.jpg)
NOTE: ES 的条件更新分为两部分,一个是 query ,也就是 where 部分, 一个是 script ,也就是 set 部分。
删除数据
根据Id删除
![](https://image.cha138.com/20210626/8add9251c9224b888f3e8f48f0893568.jpg)
![](https://image.cha138.com/20210626/52809ae7009f4382997390a9cdfa80ed.jpg)
根据查询条件删除
![](https://image.cha138.com/20210626/5055954a2aee486db0909db31758dd12.jpg)
![](https://image.cha138.com/20210626/0e70ce0467d0404eb260661a940e294c.jpg)
查询数据
查询全部
![](https://image.cha138.com/20210626/cf37c550b1144193835f0eee289e50e5.jpg)
![](https://image.cha138.com/20210626/4db0b5d238c142b7b782de74d398c29b.jpg)
条件查询
![](https://image.cha138.com/20210626/32f2e7381cfd4119a80dbb7302b023f3.jpg)
![](https://image.cha138.com/20210626/9682b71b63b64220a1b1ed49229c2ea6.jpg)
NOTE:
ES 的条件查询是有非常多的, 这里只列举了部分。
ES 的查询,在默认情况下会有打分的操作,是会损耗性能的,而常规的 sql 查询时不需要这些,所以用 bool + filter 来忽略。
查询指定字段
![](https://image.cha138.com/20210626/41b4315e277c442e914cfe76cb479ceb.jpg)
![](https://image.cha138.com/20210626/728833647c774119925138180f907c6b.jpg)
NOTE: 查询的时候,如果只要几个字段,那么可以通过
_source
来指定。
查询数量
![](https://image.cha138.com/20210626/edfdb6383f904de7955a6d9d8c47a6f7.jpg)
![](https://image.cha138.com/20210626/f789cc48d6e348daae03165ad9773351.jpg)
NOTE: 根据指定条件获取数量,建议用
_count
来查询,_search
查询的结果里面的条数不一定准确。
浅分页
![](https://image.cha138.com/20210626/0cb1c54a1b0b4e47a0da8dfe7928a7d7.jpg)
![](https://image.cha138.com/20210626/5d6be13d20394a13ac8be7b59bac001c.jpg)
NOTE: 浅分页,页码不宜过深,适合滚动加载的场景,深度分页可以考虑 SearchAfter
Group By
![](https://image.cha138.com/20210626/f57f2096e5d349de8d6088ccfe40c6d1.jpg)
![](https://image.cha138.com/20210626/730aa3e864c644cb9b7f2f3bb5464500.jpg)
NOTE: group by 属于聚合操作的一种,要用 aggs ,聚合,不用原数据,所以 size 设为 0。
Avg/Min/Max/Sum
![](https://image.cha138.com/20210626/3527128f023442209b1fe275373d2d8e.jpg)
![](https://image.cha138.com/20210626/2a24235c1c1743f0b0dd56abfee673b8.jpg)
写在最后
Elasticsearch 这一块常用的 CURD 操作,和常用的关系型数据库对照一遍,其实很容易上手。
要用到一些 Elasticsearch 特有的功能时,去查询官方文档也基本可以搞定。
以上是关于聊一聊Elasticsearch和MySQL的常用操作的主要内容,如果未能解决你的问题,请参考以下文章
来聊一聊 ElasticSearch 最新版的 Java 客户端
来聊一聊 ElasticSearch 最新版的 Java 客户端