这是ES的第一篇文章,我想和你聊聊ES是什么?
我们常说的ES即ElasticSearch,是用Java开发的当前流行的企业级搜索引擎。如果你熟悉关系型数据库的话,如Mysql,那其中有一些概念可以简单的做下横向的对比。
| Mysql | ElasticSearch |
|---|---|
| 数据库 | 索引库 |
| 表 | 类型 |
| 行 | 文档 |
| 列 | 字段 |
| 表结构定义 | 映射 |
数据库:在我们日常使用中通常会先连接到某个数据库实例,在这个实例下创建数据库,一般以业务划分,比如activity、user等,也包含一些Mysql自带的数据库如information_schema等。
索引库:索引类似于Mysql中的数据库,是指将数据存储和组织在一起的逻辑容器。用于存储和组织数据,它通常包含多个文档,每个文档代表一个可搜索的实体。
表:在Mysql中,表是一种二维结构,用于存储数据。它由行和列组成,每一行代表一条记录,每一列代表一个属性。
类型:在ES过去版本中使用了类型的概念,用于将索引内的文档进行逻辑上的分类。一个索引可以包含多个类型,每个类型可以有自己的映射和设置。但是自从7.0版本以后,类型的概念已经被弃用,官方建议将一个索引中的所有文档视为同一类型,即"_doc"类型。
行:在Mysql中,行是表中的一条记录,也被称作数据行或者数据记录。是由一组字段组成。
文档:在ES中,文档是最小的基本信息单元。它是一个JSON格式的数据对象,包含了一条完整的记录。
列:在Mysql中,列是指表中的一个数据字段,它定义了每个数据项的类型和属性。
字段:在ES中,字段是文档的组成部分,它表示文档中的一个数据项。
表结构定义:在Mysql中,表结构定义是指创建表时定义的列名、数据类型以及约束信息等,它描述了表的结构和属性。
映射:在ES中,映射用于定义文档在索引中的结构和字段属性。
上面这些概念可以先简单的了解一下,下面做一些简单的操作,熟悉一下ES的基本操作。
基本操作
索引
1.创建索引
PUT /索引名称
2.查询索引
GET /索引名称
3.删除索引
DELETE /索引名称
文档
1.添加文档
PUT /索引名称/类型/id
{
JSON结构
}
如下示例,初始化3条数据:
2.修改文档
PUT /索引名称/类型/id
{
JSON结构
}
如下示例,修改1条文档数据:
3.查询文档
GET /索引名称/类型/id
如下示例,查询文档id为1的数据:
4.删除文档
DELETE /索引名称/类型/id
基础查询
1.查询当前类型中所有文档
在Mysql中,查询某张表中所有的数据。
select * from t;
ES中用法:
GET /索引名称/类型/_search
2.条件查询
在Mysql中:查询某条件下的数据。
select * from t where age = 28;
ES中用法:
GET /索引名称/类型/_search?q=*:***
3.范围查询
按理说,范围查询也是条件的一种,但是写法略微有些差异。
在Mysql中,查询某个字段在某个范围区间的数据。
select * from t where age between 19 and 30;
ES中用法:
GET /索引名称/类型/_search?q=***[** TO **]
4.根据多个ID进行批量查询
在Mysql中,主要是in关键字
select * from t where id in (1,2);
ES中用法:
GET /索引名称/类型/_mget
{
"ids":["1","2"]
}
5.根据某条件<= 或 >
在Mysql中,直接运用表达式拼接
select * from t where age <= 30;
或者
select * from t where age > 18;
其他 < >= 类似.
那么在ES中的用法就是:
GET /索引名称/类型/_search?q=age:<=**
或者
GET /索引名称/类型/_search?q=age:>**
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=*
7.查询只输出某些字段
在Mysql中,想要输出某些字段,只需要在select 后面输入想要获取的字段名称即可,如下
select name,age from t;
在ES中,使用_source方法输出:
GET /索引名称/类型/_search?_source=字段1,字段2
8.对查询结果排序
排序是一种比较常见的操作,在Mysql中使用order by方式进行排序,升序是asc,降序是desc
select * from t order by age desc;
在ES中,使用sort方式排序:
GET /索引名称/类型/_search?sort=字段:desc
小结
本篇主要介绍了ES常见的几个概念,借助于关系型数据库Mysql中的概念进行类比理解。后面展示了一些基本的查询用法。