• ElasticSearch(三)【索引、映射、文档】


    三、核心概念


    上一篇文章ElasticSearch - Kibana

    索引

    一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个商品数据的索引,一个订单数据的索引,还有一个用户数据的索引。 一个索引由一个名字来标识必须全部是小写字母的),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字

    映射

    映射是定义一个文档和它所包含的字段如何被存储和索引的过程。在默认配置下,ES可以根据插入的数据自动地创建mapping,也可以手动创建mapping。mapping中主要包括字段名字段类型等

    文档

    文档是索引中存储的一条条数据一条文档是一个可被索引的最小单元。ES中的文档采用了轻量级的JSON格式数据来表示

    索引->表(product表、user表…) 映射->表结构(id、username、password…) 文档->数据行({“id”:1,“username”:“zhangsan”,“passowrd”:“123456”}…)

    3.1 索引的基本操作

    索引

    创建索引

    # 1.创建索引
    PUT /索引名 ===> PUT /products
    # 【注意】
    - ES中索引健康状态 red(表示索引不可用)、yellow(表示索引可用、但存在风险)、green(健康)
    - 默认ES在创建索引时,会为索引创建1个备份索引和primary索引
    
    # 2.创建索引,进行索引分配配置
    PUT /order
    {
      "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 0
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    查询所有索引信息

    在这里插入图片描述

    删除索引

    # 删除索引
    DELETE /product
    
    • 1
    • 2

    在这里插入图片描述

    3.2 映射的基本操作

    ES常见的基本类型

    • 字符串类型:keyword、text
    • 数字类型:integer、long
    • 小数类型:float、double
    • 布尔类型:boolean
    • 日期类型:date

    创建映射

    # 创建商品索引,指定mapping {id,title,price,create_time,description}
    PUT /product
    {
      "settings": {
        "number_of_replicas": 0,
        "number_of_shards": 1
      },
      "mappings": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "keyword"
          },
          "price": {
            "type": "double"
          },
          "create_time": {
            "type": "date"
          },
          "description": {
            "type": "text"
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述

    在这里插入图片描述

    查询索引的映射信息

    GET /[索引名]/_mapping	===> GET /product/_mapping
    
    • 1

    在这里插入图片描述

    注意映射信息是不允许被删除和修改的

    3.3 文档的基本操作

    文档的添加

    # 添加文档操作,指定文档id
    POST /product/_doc/2
    {
      "id": 2,
      "title": "blog",
      "price": 12.6,
      "create_time": "2022-09-12",
      "description": "vinjcent's blog"
    }
    
    # 添加文档操作,默认使用uuid
    POST /product/_doc/
    {
      "id": 2,
      "title": "blog",
      "price": 12.6,
      "create_time": "2022-09-12",
      "description": "vinjcent's blog"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    在这里插入图片描述

    文档的修改

    # 不正确的更新操作
    POST /product/_doc/1
    {
      "id": 1,
      "title": "blog",
      "price": 12.6,
      "create_time": "2022-09-12",
      "description": "vinjcent's blog"
    }
    
    # 正确的操作.【注意】会删除原有的数据后,再重新添加
    PUT /product/_doc/1
    {
      "id": 1,
      "title": "blog",
      "price": 12.6,
      "create_time": "2022-09-12",
      "description": "vinjcent's blog"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    在这里插入图片描述

    指定字段进行修改

    # 模板
    POST /[索引]/_doc/[文档id]/_update
    {
      "doc": {
        "属性": "修改内容",
         ...
      }
    }
    # 样例
    POST /product/_doc/1/_update
    {
      "doc": {
        "price": 1.7
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    在这里插入图片描述

    文档的查询

    GET /[索引]/_doc/[文档id]	===>	GET /product/_doc/1
    
    • 1

    删除文档

    DELETE /[索引]/_doc/[文档id]	===>	DELETE /product/_doc/QHnFMIMB7hXKWzAioRlM
    
    • 1

    3.4 文档的批量操作

    文档批量录入

    # 文档的批量操作
    POST /product/_doc/_bulk
    {"index": {"_id": 2}}
      { "id" : 2, "title" : "Totoro", "price" : 1.8, "create_time" : "2022-09-12", "description" : "Totoro's blog" }
    {"index": {"_id": 3}}
      { "id" : 3, "title" : "Maria", "price" : 12.0, "create_time" : "2022-09-12", "description" : "Maria's blog" }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    录入成功

    在这里插入图片描述

    批量增、删、改

    # 文档的批量操作 添加、更新、删除
    POST /product/_doc/_bulk
    {"index": {"_id": 4}}
      { "id" : 4, "title" : "Villin", "price" : 10.7, "create_time" : "2022-09-12", "description" : "Villin's blog" }
    {"update": {"_id": 3}}
      {"doc": {"title": "Maria01", "description": "Maria01's blog"}}
    {"delete": {"_id": 2}}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    注意批量操作时,不会因为一个操作的失败而全部失败(不保证原子性),而是继续执行后续操作,最后返回按照执行的状态返回

    下一篇文章ElasticSearch - 高级查询

  • 相关阅读:
    基于Python深度学习的DGA域名检测
    Unity 场景烘培 ——unity Post-Processing后处理1(四)
    chrome事件循环的自问自答
    SpringMVC第一天
    Java(一)--- DOS,文档注释,代码规范
    iNFTnews | 虚拟人的出现,是新奇还是变革?
    【C语言】函数的系统化精讲(三)
    如何用PHP编写简单的api数据接口
    图解系列--密钥,随机数,应用技术
    肖sir__设计测试用例方法之边界值03_(黑盒测试)
  • 原文地址:https://blog.csdn.net/Wei_Naijia/article/details/126923131