• 【ES笔记01】ElasticSearch数据库之index索引、doc文档、alias别名、mappings映射结构的基本操作


    这篇文章,主要介绍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、创建索引

    1. # 创建索引
    2. PUT /索引名称
    3. # 案例
    4. PUT /idx_20221124

    执行结果:

    1.2、查询索引

    1. # 查询索引
    2. GET /索引名称
    3. # 案例
    4. GET /idx_20221124

    执行结果:

    1.3、查询所有索引

    1. # 查询所有索引
    2. GET /_cat/indices?v

    注意:【v】表示显示表头信息。

    执行结果:

    1.4、删除索引

    1. # 删除索引
    2. DELETE /索引名称
    3. # 案例
    4. 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里面。

    1. # 创建文档
    2. POST /索引名称/_doc/doc文档id
    3. {
    4. // 请求体,需要保存的JSON文档数据
    5. }
    6. # 测试案例
    7. POST /idx_20221124/_doc/2022002
    8. {
    9. "username": "test-name-csdn",
    10. "nickname": "niick-name-csdn",
    11. "age": 20
    12. }

    执行结果:

    2.2、更新文档

    (1)全量更新

    更新文档和创建文档是一致的,修改JSON格式的请求体内容,ES就会更新相应的字段数据。下面这种更新文档的方式,将会覆盖JSON文档所有字段。

    1. # 更新文档
    2. POST /索引名称/_doc/doc文档id
    3. {
    4. // 请求体,需要保存的JSON文档数据
    5. }
    6. # 测试案例
    7. POST /idx_20221124/_doc/2022002
    8. {
    9. "username": "test-name-csdn001",
    10. "nickname": "niick-name-csdn",
    11. "age": 20
    12. }

    执行结果:

    (2)增量更新

    第一种更新文档的方式是全量覆盖JSON字段,如果不想这么更新,可以采用增量更新的方式,只更新指定的JSON字段。

    1. # 增量更新文档
    2. POST /索引名称/_doc/doc文档id/_update
    3. {
    4. "doc": {
    5. // 需要更新的JSON字段
    6. }
    7. }
    8. # 测试案例
    9. POST /idx_20221124/_doc/2022001/_update
    10. {
    11. "doc": {
    12. "username" : "test-name-csdn002"
    13. }
    14. }

    执行结果:

    2.3、删除文档

    1. # 删除文档
    2. DELETE /索引名称/_doc/doc文档id
    3. # 测试案例
    4. DELETE /idx_20221124/_doc/2022002

    执行结果:

    2.4、查询文档

    1. # 查询指定文档
    2. GET /索引名称/_doc/doc文档id
    3. # 测试案例
    4. GET /idx_20221124/_doc/2022001

    执行结果:

    三、别名alias相关操作

    ES中允许为索引添加别名,当一个index索引设置别名alias之后,我们就可以通过别名alias来操作ES数据,就和直接使用索引名称是一样的效果,一个index索引可以设置多个别名alias。

    3.1、查询别名

    1. # 查询别名
    2. GET /索引名称/_alias
    3. # 案例
    4. GET /idx_20221124/_alias

    执行结果:

    3.2、添加别名

    ES默认情况下,为index索引添加别名alias之后,通过这个别名只能够对索引中的数据进行查询操作,不能够进行增删改操作,如果需要通过别名对index索引数据进行增删改操作,那么在设置别名的时候需要添加【is_write_index=true】属性值。

    (1)第一种方式

    1. # 设置别名
    2. POST /索引名称/_alias/自定义的索引别名
    3. # 测试案例
    4. POST /idx_20221124/_alias/idx_20221124_bak

    执行结果:

    (2)第二种方式

    1. # 设置别名
    2. POST /_aliases
    3. {
    4. "actions": [
    5. {
    6. "add": {
    7. "index": "索引名称",
    8. "alias": "索引别名名称,可以是多个,多个使用数组表示",
    9. "is_write_index": true // 索引别名是否可写,即:是否可以通过索引别名进行增删改操作
    10. }
    11. }
    12. ]
    13. }
    14. # 测试案例
    15. POST /_aliases
    16. {
    17. "actions": [
    18. {
    19. "add": {
    20. "index": "idx_20221124",
    21. "alias": "idx_20221124_bak02",
    22. "is_write_index": true
    23. }
    24. }
    25. ]
    26. }

    执行结果:

    3.3、删除别名

    (1)第一种方式

    1. # 删除别名
    2. DELETE /索引名称/_alias/需要删除的索引别名
    3. # 测试案例
    4. DELETE /idx_20221124/_alias/idx_20221124_bak

    执行结果:

    (2)第二种方式

    1. # 删除别名
    2. POST /_aliases
    3. {
    4. "actions": [
    5. {
    6. "remove": {
    7. "index": "idx_20221124",
    8. "alias": "idx_20221124_bak02"
    9. }
    10. }
    11. ]
    12. }

    执行结果:

    3.4、重命名别名

    ES中重命名索引别名,是通过先删除后创建来实现的。

    1. # 重命名别名
    2. POST /_aliases
    3. {
    4. "actions": [
    5. {
    6. "remove": {
    7. "index": "idx_20221124",
    8. "alias": "idx_20221124_bak01"
    9. }
    10. },
    11. {
    12. "add": {
    13. "index": "idx_20221124",
    14. "alias": "idx_20221124_bak02"
    15. }
    16. }
    17. ]
    18. }

    四、映射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类型。

    1. # 查询mapping结构
    2. GET /索引名称/_mapping
    3. # 测试案例
    4. GET /idx_20221124/_mapping

    执行结果:

    4.2、创建mapping映射

    ES中mapping映射结构,需要在创建index索引的时候一起创建,如果索引已经创建了,并且已经存在doc文档,那么ES是不允许修改mapping结构的。为什么呢???因为ES是会对doc文档的数据字段进行索引,索引之后就可以进行快速查询,如果我们修改了mapping结构,那么就相当于需要对doc文档数据重新进行索引,所以ES不允许直接修改mapping结构。

    1. # 添加mapping结构
    2. PUT /idx_20221124
    3. {
    4. "mappings": {
    5. "properties": {
    6. "username": {
    7. "type": "keyword"
    8. },
    9. "nickname": {
    10. "type": "keyword"
    11. },
    12. "age": {
    13. "type": "integer"
    14. }
    15. }
    16. }
    17. }

    执行结果:

    到此,mapping结构创建完成了,之后向这个index索引里面添加数据的时候,对应的doc文档数据类型都会是mapping指定的类型。

    综上,这篇文章结束了,主要介绍ElasticSearch数据库之index索引、doc文档、alias别名、mappings映射结构的基本操作。

  • 相关阅读:
    面试官:告诉我为什么static和transient关键字修饰的变量不能被序列化?
    Android 串口通讯
    中文文本纠错(CSC)任务Benchmark数据集SIGHAN介绍与预处理
    【PostgreSQL】PG左模糊 右模糊匹配查询,如何走btree索引
    架构基本概念和架构本质
    2022年湖北天门中级工程师职称评审要求是什么呢?如何评审呢?甘建二
    NIO-Socket实现简易聊天室
    flink入门
    唐老师讲电赛
    【数据结构】线性表(九)队列:链式队列及其基本操作(初始化、判空、入队、出队、存取队首元素)
  • 原文地址:https://blog.csdn.net/qq_39826207/article/details/128011474