这篇文章,主要介绍ElasticSearch数据库之index索引、doc文档、alias别名、mappings映射结构的基本操作。
目录
一、索引index相关操作
1.1、创建索引
1.2、查询索引
1.3、查询所有索引
1.4、删除索引
二、文档doc相关操作
2.1、创建文档
2.2、更新文档
(1)全量更新
(2)增量更新
2.3、删除文档
2.4、查询文档
三、别名alias相关操作
3.1、查询别名
3.2、添加别名
(1)第一种方式
(2)第二种方式
3.3、删除别名
(1)第一种方式
(2)第二种方式
3.4、重命名别名
四、映射mapping相关操作
4.1、查询mapping结构
4.2、创建mapping映射
ElasticSearch,简称:ES,是一个分布式的分析和搜索引擎,底层是基于开源框架Lucene实现的,对外提供了一组Restful风格的API用于操作ES数据库。ES是一个非关系型数据库,它采用JSON文档的格式保存数据,并且可以对JSON中的每一个字段进行索引,从而实现快速搜索功能。ES中的一些概念可以类比成关系型数据库中的一些概念,大致如下图所示:
一、索引index相关操作
ES提供的API是基于Restful风格,所以我们可以使用Postman、Kibana、curl等工具或命令执行相关的请求,这篇文章将采用【ES 7.13.0】和【Kibana 7.13.0】工具执行ES相关操作命令。
1.1、创建索引
# 创建索引
PUT /索引名称
# 案例
PUT /idx_20221124
执行结果:
1.2、查询索引
# 查询索引
GET /索引名称
# 案例
GET /idx_20221124
执行结果:
1.3、查询所有索引
# 查询所有索引
GET /_cat/indices?v
注意:【v】表示显示表头信息。
执行结果:
1.4、删除索引
# 删除索引
DELETE /索引名称
# 案例
DELETE /idx_20221124
执行结果:
二、文档doc相关操作
- ES 5.x版本,支持一个index索引下面,哪个创建多个type类型(相当于一个数据库下面允许创建多张数据表)。
- ES 6.x版本,只允许一个index索引下面,最多创建一个type类型。
- ES 7.x版本开始,就已经不推荐使用type类型,index索引下面不要创建type类型,ES默认会使用一个【_doc】的type类型。
2.1、创建文档
每一个doc文档都有一个文档ID,相当于主键,用于唯一标识一条数据记录,文档id可以自己定义,也可以不指定,如果没有指定文档id,那么ES会随机生成一个文档id。
注意:创建文档的时候,如果index索引不存在,那么创建文档的时候会首先创建索引,然后再将数据添加到ES里面。
# 创建文档
POST /索引名称/_doc/doc文档id
{
// 请求体,需要保存的JSON文档数据
}
# 测试案例
POST /idx_20221124/_doc/2022002
{
"username": "test-name-csdn",
"nickname": "niick-name-csdn",
"age": 20
}
执行结果:
2.2、更新文档
(1)全量更新
更新文档和创建文档是一致的,修改JSON格式的请求体内容,ES就会更新相应的字段数据。下面这种更新文档的方式,将会覆盖JSON文档所有字段。
# 更新文档
POST /索引名称/_doc/doc文档id
{
// 请求体,需要保存的JSON文档数据
}
# 测试案例
POST /idx_20221124/_doc/2022002
{
"username": "test-name-csdn001",
"nickname": "niick-name-csdn",
"age": 20
}
执行结果:
(2)增量更新
第一种更新文档的方式是全量覆盖JSON字段,如果不想这么更新,可以采用增量更新的方式,只更新指定的JSON字段。
# 增量更新文档
POST /索引名称/_doc/doc文档id/_update
{
"doc": {
// 需要更新的JSON字段
}
}
# 测试案例
POST /idx_20221124/_doc/2022001/_update
{
"doc": {
"username" : "test-name-csdn002"
}
}
执行结果:
2.3、删除文档
# 删除文档
DELETE /索引名称/_doc/doc文档id
# 测试案例
DELETE /idx_20221124/_doc/2022002
执行结果:
2.4、查询文档
# 查询指定文档
GET /索引名称/_doc/doc文档id
# 测试案例
GET /idx_20221124/_doc/2022001
执行结果:
三、别名alias相关操作
ES中允许为索引添加别名,当一个index索引设置别名alias之后,我们就可以通过别名alias来操作ES数据,就和直接使用索引名称是一样的效果,一个index索引可以设置多个别名alias。
3.1、查询别名
# 查询别名
GET /索引名称/_alias
# 案例
GET /idx_20221124/_alias
执行结果:
3.2、添加别名
ES默认情况下,为index索引添加别名alias之后,通过这个别名只能够对索引中的数据进行查询操作,不能够进行增删改操作,如果需要通过别名对index索引数据进行增删改操作,那么在设置别名的时候需要添加【is_write_index=true】属性值。
(1)第一种方式
# 设置别名
POST /索引名称/_alias/自定义的索引别名
# 测试案例
POST /idx_20221124/_alias/idx_20221124_bak
执行结果:
(2)第二种方式
# 设置别名
POST /_aliases
{
"actions": [
{
"add": {
"index": "索引名称",
"alias": "索引别名名称,可以是多个,多个使用数组表示",
"is_write_index": true // 索引别名是否可写,即:是否可以通过索引别名进行增删改操作
}
}
]
}
# 测试案例
POST /_aliases
{
"actions": [
{
"add": {
"index": "idx_20221124",
"alias": "idx_20221124_bak02",
"is_write_index": true
}
}
]
}
执行结果:
3.3、删除别名
(1)第一种方式
# 删除别名
DELETE /索引名称/_alias/需要删除的索引别名
# 测试案例
DELETE /idx_20221124/_alias/idx_20221124_bak
执行结果:
(2)第二种方式
# 删除别名
POST /_aliases
{
"actions": [
{
"remove": {
"index": "idx_20221124",
"alias": "idx_20221124_bak02"
}
}
]
}
执行结果:
3.4、重命名别名
ES中重命名索引别名,是通过先删除后创建来实现的。
# 重命名别名
POST /_aliases
{
"actions": [
{
"remove": {
"index": "idx_20221124",
"alias": "idx_20221124_bak01"
}
},
{
"add": {
"index": "idx_20221124",
"alias": "idx_20221124_bak02"
}
}
]
}
四、映射mapping相关操作
ES中的mapping,就相当于关系型数据库中的表字段结构,mapping主要用于定义JSON文档中的每一个字段的数据类型,ES中常见的几种数据类型如下所示:
请求体中的数据类型有如下几种:
字符串类型:text、keyword
数值类型:long、integer、short、byte、double、float、half float、scaled float
日期类型:date
布尔类型:boolean
二进制类型:binary
4.1、查询mapping结构
当我们创建索引的时候,如果没有指定mapping结构,那么当第一次向ES数据库中添加doc文档的时候,ES会默认根据JSON中的每个字段类型,设置默认的mapping结构。
注意:字符串类型,默认采用text,数值类型默认采用long类型。
# 查询mapping结构
GET /索引名称/_mapping
# 测试案例
GET /idx_20221124/_mapping
执行结果:
4.2、创建mapping映射
ES中mapping映射结构,需要在创建index索引的时候一起创建,如果索引已经创建了,并且已经存在doc文档,那么ES是不允许修改mapping结构的。为什么呢???因为ES是会对doc文档的数据字段进行索引,索引之后就可以进行快速查询,如果我们修改了mapping结构,那么就相当于需要对doc文档数据重新进行索引,所以ES不允许直接修改mapping结构。
# 添加mapping结构
PUT /idx_20221124
{
"mappings": {
"properties": {
"username": {
"type": "keyword"
},
"nickname": {
"type": "keyword"
},
"age": {
"type": "integer"
}
}
}
}
执行结果:
到此,mapping结构创建完成了,之后向这个index索引里面添加数据的时候,对应的doc文档数据类型都会是mapping指定的类型。
综上,这篇文章结束了,主要介绍ElasticSearch数据库之index索引、doc文档、alias别名、mappings映射结构的基本操作。