ElasticSearch - 索引库和文档相关命令操作

本文详细介绍了ElasticSearch中的索引库操作,包括mapping属性设置、索引库的创建、增删改以及文档的添加、查询、删除和修改方法,特别关注了全量修改与增量修改的区别和处理方式。

目录

一、ElasticSearch 索引库操作

1.1、mapping 属性

1.2、索引库相关操作

1.2.1、创建索引库

1.2.2、增加和删除索引库

1.2.3、修改索引库

1.3、文档操作

1.3.1、添加文档

1.3.2、文档的查询和删除

1.3.3、修改文档

1.全量修改:会先删除旧文档,添加新文档.

2. 增量修改:修改执行字段值.

如果通过 PUT 进行全量修改的文档和原来的文档不一样,会发生什么? 


一、ElasticSearch 索引库操作


1.1、mapping 属性

mappinig 是对索引库中文档的约束,常见的 mapping 属性如下:

  • type:表示字段数据类型,常见的类型如下
    • 字符串:text(可以进行分词的文本)、keyword(精确值,不用进行分词的文本.  例如:国家名、品牌、公司名、ip 地址......).
    • 数值:long、integer、short、byte、double、float
    • 布尔:boolean
    • 日期 date
    • 对象:object
  • index:是否创建索引。默认 true.
  • analyzer:使用那种分词器进行分词(比如之前所说的 IK 分词器).
  • properties:该字段的子字段.

例如如下:

PUT /heima
{
  "mappings": {
    "properties": {
      //这里是自定义的 info 信息
      "info":{ 
        "type": "text", //表示 info 中的信息可以进行分词.
        "analyzer": "ik_smart" //使用 IK 分词器分词
        //这里没有定义 index ,表示默认为词条创建索引
      },
      "email":{
        "type": "keyword", //表示 email 不需要分词,是一个关键字
        "index": "false" //不创建索引
      },
      "createTime": {
        "type": "date", //时间类型
        "format": "yyyy-MM-dd HH:mm:ss", //约定时间格式
        "index": false
      },
      "name":{
        "properties": {
          "firstName": {
            "type": "keyword"
          }
        }
      },
      // ......
    }
  }
}

1.2、索引库相关操作

1.2.1、创建索引库

ES 中通过 Restful 请求操作索引库、文档.  请求的内容用 DSL 语句来表示.

创建 索引库 和 mapping 的语法如下:

PUT /索引库名称
{
  "mappings": {
    "properties": {
      "字段名":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "字段名2":{
        "type": "keyword",
        "index": "false"
      },
      "字段名3": {
        "type": "date", //时间类型
        "format": "yyyy-MM-dd HH:mm:ss", //约定时间格式
        "index": false
      },
      "字段名4":{
        "properties": {
          "子字段": {
            "type": "keyword"
          }
        }
      },
      // ...略
    }
  }
}

假设创建以下索引库

PUT /userinfo
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type": "keyword",
        "index": "false"
      },
      "name":{
        "properties": {
          "firstName": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

1.2.2、增加和删除索引库

查看索引库语法:

GET/索引库名

示例:

GET /userinfo

删除索引库的语法:

DELETE /索引库名

示例:

DELETE /userinfo

删除后再 GET 就会发现找不到该索引库,如下

1.2.3、修改索引库

索引库和 mapping 一旦创建就无法修改,只可以再原来的基础上新增字段.

语法如下:

PUT /索引库名/_mapping
{
  "properties": {
    "新字段名":{
      "type": "integer"
    }
  }
}

实例如下:

PUT /userinfo/_mapping
{
  "properties": {
    "age":{
      "type": "integer"
    }
  }
}

例如这里我先创建 userinfo 索引库.

接着新增 age 字段:

接着查询 userinfo 索引库

如果是 PUT 的是存在的字段呢,比如 age,将 type 改为 keyword,他就会告诉你 mapper 中 integer 类型不可以修改成 keyword.

1.3、文档操作

1.3.1、添加文档

这里就类似于 mysql 中向表中添加数据一样,需要先创建表,后向添加数据.

文档操作也是如此,需要先创建索引库,然后才能添加文档.

添加文档语法如下:

POST /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    "字段3": {
        "子属性1": "值3",
        "子属性2": "值4"
    },
    // ...
}

示例如下:

POST /userinfo/_doc/1
{
    "info": "大家好,我是练习了两年半的偶像练习生",
    "email": "cxk@itcast.cn",
    "name": {
        "firstName": "c",
        "lastName": "xk"
    }
}

假设创建以下索引库:

下面添加文档:

  •  _index:表示你是向哪个索引库添加文档.
  • _type:表示类型添加的是什么类型,_doc 表示文档.
  • _id:是添加文档的指定的 id.
  • version:这是一个版本号,基于自旋锁实现的版本号,这个每对这个文档进行一次操作,版本号 就会 + 1.
  • result:created 表示创建成功.

1.3.2、文档的查询和删除

查询文档语法:

GET /索引库名/_doc/文档id 

示例:

GET /userinfo/_doc/1 

删除文档语法:

DELETE /索引库名/_doc/文档id 

示例:

DELETE /userinfo/_doc/1 

1.3.3、修改文档

修改文档有两种方式

1.全量修改:会先删除旧文档,添加新文档.

语法如下:

PUT /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    // ... 略
}

示例如下:

PUT /userinfo/_doc/1
{
    "info": "我是练习两年半的偶像练习生",
    "email": "cxk@itcast.cn",
    "name": {
        "firstName": "c",
        "lastName": "xk"
    }
}

例如原来存在以下文档

现在 PUT 以下操作

然后 GET 查询就是修改后的文档

2. 增量修改:修改执行字段值.

主要注意 索引名后面是 _update 

语法如下:

POST /索引库名/_update/文档id
{
    "doc": {
         "字段名": "新的值",
    }
}

示例如下:

POST /userinfo/_update/1
{
  "doc": {
    "email": "ZhaoYun@itcast.cn"
  }
}

假设原本有文档如下

修改 info 字段的值,如下

通过 GET 获取文档

如果通过 PUT 进行全量修改的文档和原来的文档不一样,会发生什么? 

例如存在以下文档

这里新增字段 age ,结果如下

实际上,这里 es 的处理方式,就是按照 “删除旧文档,新增新文档” 的操作来修改文档的.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈亦康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值