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

目录

[一、ElasticSearch 索引库操作](#一、ElasticSearch 索引库操作)

[1.1、mapping 属性](#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. 增量修改:修改执行字段值.](#2. 增量修改:修改执行字段值.)

[如果通过 PUT 进行全量修改的文档和原来的文档不一样,会发生什么?](#如果通过 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" //不创建索引
      },
      "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":{
        "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": "[email protected]",
    "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": "[email protected]",
    "name": {
        "firstName": "c",
        "lastName": "xk"
    }
}

例如原来存在以下文档

现在 PUT 以下操作

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

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

主要注意 索引名后面是 _update

语法如下:

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

示例如下:

复制代码
POST /userinfo/_update/1
{
  "doc": {
    "email": "[email protected]"
  }
}

假设原本有文档如下

修改 info 字段的值,如下

通过 GET 获取文档

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

例如存在以下文档

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

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

相关推荐
愿你天黑有灯下雨有伞1 小时前
Docker 安装 Elasticsearch 教程
运维·elasticsearch·docker
麻芝汤圆1 小时前
使用 MapReduce 进行高效数据清洗:从理论到实践
大数据·linux·服务器·网络·数据库·windows·mapreduce
树莓集团2 小时前
树莓集团海南落子:自贸港布局的底层逻辑
大数据
LuckyRich12 小时前
【boost搜索引擎】下
开发语言·c++·搜索引擎
不剪发的Tony老师2 小时前
Hue:一个大数据查询工具
大数据
靠近彗星2 小时前
如何检查 HBase Master 是否已完成初始化?| 详细排查指南
大数据·数据库·分布式·hbase
墨染丶eye3 小时前
数据仓库项目启动与管理
大数据·数据仓库·spark
SelectDB3 小时前
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
大数据·数据库·aigc
遇到困难睡大觉哈哈4 小时前
Git推送错误解决方案:`rejected -> master (fetch first)`
大数据·git·elasticsearch
Roam-G4 小时前
Elasticsearch 证书问题解决
大数据·elasticsearch·jenkins