Elasticsearch vs. MySQL:全面解析基本概念及操作指南

300 阅读4分钟

这是ES的第一篇文章,我想和你聊聊ES是什么?

我们常说的ES即ElasticSearch,是用Java开发的当前流行的企业级搜索引擎。如果你熟悉关系型数据库的话,如Mysql,那其中有一些概念可以简单的做下横向的对比。

MysqlElasticSearch
数据库索引库
类型
文档
字段
表结构定义映射

数据库:在我们日常使用中通常会先连接到某个数据库实例,在这个实例下创建数据库,一般以业务划分,比如activity、user等,也包含一些Mysql自带的数据库如information_schema等。

索引库:索引类似于Mysql中的数据库,是指将数据存储和组织在一起的逻辑容器。用于存储和组织数据,它通常包含多个文档,每个文档代表一个可搜索的实体。

:在Mysql中,表是一种二维结构,用于存储数据。它由行和列组成,每一行代表一条记录,每一列代表一个属性。

类型:在ES过去版本中使用了类型的概念,用于将索引内的文档进行逻辑上的分类。一个索引可以包含多个类型,每个类型可以有自己的映射和设置。但是自从7.0版本以后,类型的概念已经被弃用,官方建议将一个索引中的所有文档视为同一类型,即"_doc"类型。

:在Mysql中,行是表中的一条记录,也被称作数据行或者数据记录。是由一组字段组成。

文档:在ES中,文档是最小的基本信息单元。它是一个JSON格式的数据对象,包含了一条完整的记录。

:在Mysql中,列是指表中的一个数据字段,它定义了每个数据项的类型和属性。

字段:在ES中,字段是文档的组成部分,它表示文档中的一个数据项。

表结构定义:在Mysql中,表结构定义是指创建表时定义的列名、数据类型以及约束信息等,它描述了表的结构和属性。

映射:在ES中,映射用于定义文档在索引中的结构和字段属性。

上面这些概念可以先简单的了解一下,下面做一些简单的操作,熟悉一下ES的基本操作。

基本操作

索引

1.创建索引

PUT /索引名称

image.png

2.查询索引

GET /索引名称

image.png

3.删除索引

DELETE /索引名称

image.png

文档

1.添加文档

PUT /索引名称/类型/id
{
JSON结构
}

如下示例,初始化3条数据:

image.png

2.修改文档

PUT /索引名称/类型/id
{
JSON结构
}

如下示例,修改1条文档数据:

image.png

3.查询文档

GET /索引名称/类型/id

如下示例,查询文档id为1的数据:

image.png

4.删除文档

DELETE /索引名称/类型/id

基础查询

1.查询当前类型中所有文档

在Mysql中,查询某张表中所有的数据。

select * from t;

ES中用法:

GET /索引名称/类型/_search

image.png

2.条件查询

在Mysql中:查询某条件下的数据。

select * from t where age = 28;

ES中用法:

GET /索引名称/类型/_search?q=*:***

image.png

3.范围查询

按理说,范围查询也是条件的一种,但是写法略微有些差异。

在Mysql中,查询某个字段在某个范围区间的数据。

select * from t where age between 19 and 30;

ES中用法:

GET /索引名称/类型/_search?q=***[** TO **]

image.png

4.根据多个ID进行批量查询

在Mysql中,主要是in关键字

select * from t where id in (1,2);

ES中用法:

GET /索引名称/类型/_mget
{
"ids":["1","2"]
}

image.png

5.根据某条件<= 或 >

在Mysql中,直接运用表达式拼接

select * from t where age <= 30;

或者

select * from t where age > 18;

其他 < >= 类似.

那么在ES中的用法就是:

GET /索引名称/类型/_search?q=age:<=**

或者

GET /索引名称/类型/_search?q=age:>**

image.png

6.分页查询

在Mysql中,主要是利用了limit size的用法

select * from t where age between 18 and 30 limit 0, 1

在ES中,and的语义用的&代替,limit size的语义用from size,如下:

GET /索引名称/类型/_search?from=*&size=*

image.png

7.查询只输出某些字段

在Mysql中,想要输出某些字段,只需要在select 后面输入想要获取的字段名称即可,如下

select name,age from t;

在ES中,使用_source方法输出:

GET /索引名称/类型/_search?_source=字段1,字段2

image.png

8.对查询结果排序

排序是一种比较常见的操作,在Mysql中使用order by方式进行排序,升序是asc,降序是desc

select * from t order by age desc;

在ES中,使用sort方式排序:

GET /索引名称/类型/_search?sort=字段:desc

image.png

小结

本篇主要介绍了ES常见的几个概念,借助于关系型数据库Mysql中的概念进行类比理解。后面展示了一些基本的查询用法。