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": "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 的处理方式,就是按照 "删除旧文档,新增新文档" 的操作来修改文档的.

相关推荐
wudl55661 小时前
flink 1.20 物化表(Materialized Tables)
大数据·flink·linq
InfiSight智睿视界2 小时前
AI 技术助力汽车美容行业实现精细化运营管理
大数据·人工智能
熙客3 小时前
搜索引擎数据库介绍
搜索引擎
8K超高清4 小时前
高校巡展:中国传媒大学+河北传媒学院
大数据·运维·网络·人工智能·传媒
amhjdx4 小时前
政策东风下:卓玛儿童级健康腻子引领行业升级
大数据
TDengine (老段)5 小时前
TDengine 字符串函数 CONCAT_WS 用户手册
android·大数据·数据库·时序数据库·tdengine·涛思数据
TTGGGFF5 小时前
人工智能:大语言模型或为死胡同?拆解AI发展的底层逻辑、争议与未来方向
大数据·人工智能·语言模型
杂家7 小时前
Hadoop完全分布式部署(超详细)
大数据·hadoop·分布式
BD_Marathon7 小时前
【Hadoop】hadoop3.3.1完全分布式配置
大数据·hadoop·分布式
Ashlee_code8 小时前
BSS供应商:电信与金融领域的幕后支撑者
大数据·网络·金融·系统架构·跨境·金融机构·场外期权