这篇文章,主要介绍ElasticSearch数据库之index索引、doc文档、alias别名、mappings映射结构的基本操作。
目录
ElasticSearch,简称:ES,是一个分布式的分析和搜索引擎,底层是基于开源框架Lucene实现的,对外提供了一组Restful风格的API用于操作ES数据库。ES是一个非关系型数据库,它采用JSON文档的格式保存数据,并且可以对JSON中的每一个字段进行索引,从而实现快速搜索功能。ES中的一些概念可以类比成关系型数据库中的一些概念,大致如下图所示:

ES提供的API是基于Restful风格,所以我们可以使用Postman、Kibana、curl等工具或命令执行相关的请求,这篇文章将采用【ES 7.13.0】和【Kibana 7.13.0】工具执行ES相关操作命令。
- # 创建索引
- PUT /索引名称
-
- # 案例
- PUT /idx_20221124
执行结果:

- # 查询索引
- GET /索引名称
-
- # 案例
- GET /idx_20221124
执行结果:

- # 查询所有索引
- GET /_cat/indices?v
注意:【v】表示显示表头信息。
执行结果:

- # 删除索引
- DELETE /索引名称
-
- # 案例
- DELETE /idx_20221124
执行结果:

每一个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
- }
执行结果:

更新文档和创建文档是一致的,修改JSON格式的请求体内容,ES就会更新相应的字段数据。下面这种更新文档的方式,将会覆盖JSON文档所有字段。
- # 更新文档
- POST /索引名称/_doc/doc文档id
- {
- // 请求体,需要保存的JSON文档数据
- }
-
- # 测试案例
- POST /idx_20221124/_doc/2022002
- {
- "username": "test-name-csdn001",
- "nickname": "niick-name-csdn",
- "age": 20
- }
执行结果:

第一种更新文档的方式是全量覆盖JSON字段,如果不想这么更新,可以采用增量更新的方式,只更新指定的JSON字段。
- # 增量更新文档
- POST /索引名称/_doc/doc文档id/_update
- {
- "doc": {
- // 需要更新的JSON字段
- }
- }
-
- # 测试案例
- POST /idx_20221124/_doc/2022001/_update
- {
- "doc": {
- "username" : "test-name-csdn002"
- }
- }
执行结果:

- # 删除文档
- DELETE /索引名称/_doc/doc文档id
-
- # 测试案例
- DELETE /idx_20221124/_doc/2022002
执行结果:

- # 查询指定文档
- GET /索引名称/_doc/doc文档id
-
- # 测试案例
- GET /idx_20221124/_doc/2022001
执行结果:

ES中允许为索引添加别名,当一个index索引设置别名alias之后,我们就可以通过别名alias来操作ES数据,就和直接使用索引名称是一样的效果,一个index索引可以设置多个别名alias。
- # 查询别名
- GET /索引名称/_alias
-
- # 案例
- GET /idx_20221124/_alias
执行结果:

ES默认情况下,为index索引添加别名alias之后,通过这个别名只能够对索引中的数据进行查询操作,不能够进行增删改操作,如果需要通过别名对index索引数据进行增删改操作,那么在设置别名的时候需要添加【is_write_index=true】属性值。
- # 设置别名
- POST /索引名称/_alias/自定义的索引别名
-
- # 测试案例
- POST /idx_20221124/_alias/idx_20221124_bak
执行结果:

- # 设置别名
- 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
- }
- }
- ]
- }
执行结果:

- # 删除别名
- DELETE /索引名称/_alias/需要删除的索引别名
-
- # 测试案例
- DELETE /idx_20221124/_alias/idx_20221124_bak
执行结果:

- # 删除别名
- POST /_aliases
- {
- "actions": [
- {
- "remove": {
- "index": "idx_20221124",
- "alias": "idx_20221124_bak02"
- }
- }
- ]
- }
执行结果:

ES中重命名索引别名,是通过先删除后创建来实现的。
- # 重命名别名
- POST /_aliases
- {
- "actions": [
- {
- "remove": {
- "index": "idx_20221124",
- "alias": "idx_20221124_bak01"
- }
- },
- {
- "add": {
- "index": "idx_20221124",
- "alias": "idx_20221124_bak02"
- }
- }
- ]
- }
ES中的mapping,就相当于关系型数据库中的表字段结构,mapping主要用于定义JSON文档中的每一个字段的数据类型,ES中常见的几种数据类型如下所示:
请求体中的数据类型有如下几种:
字符串类型:text、keyword
数值类型:long、integer、short、byte、double、float、half float、scaled float
日期类型:date
布尔类型:boolean
二进制类型:binary
当我们创建索引的时候,如果没有指定mapping结构,那么当第一次向ES数据库中添加doc文档的时候,ES会默认根据JSON中的每个字段类型,设置默认的mapping结构。
注意:字符串类型,默认采用text,数值类型默认采用long类型。
- # 查询mapping结构
- GET /索引名称/_mapping
-
- # 测试案例
- GET /idx_20221124/_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映射结构的基本操作。