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

相关推荐
Elasticsearch1 天前
如何通过 Claude Code 来写入 CSV 数据到 Elasticsearch
elasticsearch
得物技术2 天前
从埋点需求到规则资产:Hermes Agent 重构得物数仓工作流
大数据·llm·ai编程
久美子2 天前
AI驱动数仓建设的Harness工程实践——本体建模、知识分层与上下文工程
大数据
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
大志哥1233 天前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch
果丁智能3 天前
物联网智能锁赋能集中式住宿:身份核验与远程权限管控的全链路技术实践
大数据·人工智能·物联网·智能家居
ApacheSeaTunnel3 天前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步
weixin_397574093 天前
PDF复杂表格的1:1还原引擎:跨页表格自动拼接技术实战
大数据·人工智能·pdf
TableRow3 天前
参数化搜索的实现原理:从多维索引到查询优化
elasticsearch·全文检索
极光代码工作室3 天前
基于数据仓库的电商数据分析平台
大数据·hadoop·python·spark·数据可视化