前言
ElasticSearch,开源的搜索和数据分析引擎,也是名列前茅的 nosql。
很多时候会想拿它和关系型数据库做对比,严格上它们是没有太多可比性的。
不过把有的东西放在一起比较,会帮助我们快速去理解一些 ElasticSearch 的内容。
老黄这边抽空梳理了一些常用的 sql 语句 “对应” ElasticSearch 的操作,主要是针对 CURD 的。
示例用的是 mysql 和 ElasticSearch 7.12.0 。
表操作
为了简单起见,弄一个简单的订单表 order-2021
来演示。
删除表
创建表
NOTE:
mysql 的索引需要一个一个的加,ES 这边不需要。
mysql 有自增 Id, ES 这边也会有自动生成 Id 的操作,同样的,两边也可以自定义 Id。
keyword 和 text 按需调整。
改表名
NOTE: ES 的是起一个别名,然后两个名字都可以用。
插入数据
单条插入
批量插入
NOTE:
ES 的批量操作需要注意,每一行最后要有换行符
\n
结尾Content-Type 指定为 application/x-ndjson
更新数据
根据ID更新
根据查询条件更新
NOTE: ES 的条件更新分为两部分,一个是 query ,也就是 where 部分, 一个是 script ,也就是 set 部分。
删除数据
根据Id删除
根据查询条件删除
查询数据
查询全部
条件查询
NOTE:
ES 的条件查询是有非常多的, 这里只列举了部分。
ES 的查询,在默认情况下会有打分的操作,是会损耗性能的,而常规的 sql 查询时不需要这些,所以用 bool + filter 来忽略。
查询指定字段
NOTE: 查询的时候,如果只要几个字段,那么可以通过
_source
来指定。
查询数量
NOTE: 根据指定条件获取数量,建议用
_count
来查询,_search
查询的结果里面的条数不一定准确。
浅分页
NOTE: 浅分页,页码不宜过深,适合滚动加载的场景,深度分页可以考虑 SearchAfter
Group By
NOTE: group by 属于聚合操作的一种,要用 aggs ,聚合,不用原数据,所以 size 设为 0。
Avg/Min/Max/Sum
写在最后
Elasticsearch 这一块常用的 CURD 操作,和常用的关系型数据库对照一遍,其实很容易上手。
要用到一些 Elasticsearch 特有的功能时,去查询官方文档也基本可以搞定。