Elasticsearch 核心技术(四):索引管理、映射管理、文档管理(REST API)

news2025/1/14 1:13:03

在这里插入图片描述

❤️ 个人主页:水滴技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏:大数据核心技术从入门到精通

文章目录

  • 一、索引管理
    • 1. 创建索引
      • 创建一个索引
      • 索引设置
      • 映射字段
      • 别名
    • 2. 获取索引
    • 3. 删除索引
    • 4. 判断索引是否存在
  • 二、映射管理
    • 1. 获取映射
    • 2. 添加映射字段
  • 三、文档管理
    • 1. 创建文档
      • `POST /<target>/_doc/`
      • `POST /<target>/_create/<_id>`
      • `PUT /<target>/_create/<_id>`
      • `PUT /<target>/_doc/<_id>`
    • 2. 修改文档
      • 更新文档字段值
      • 添加文档字段
      • 删除文档字段
    • 3. 获取文档
      • `GET <index>/_doc/<_id>`
      • `GET <index>/_source/<_id>`
    • 4. 判断文档是否存在
    • 5. 删除文档
  • 四、总结
  • 系列文章
  • 热门专栏


大家好,我是水滴~~

本篇文章主要介绍 Elasticsearch 关于索引、映射和文档的管理。每个请求都会有配套示例,可以当成工具书查看。

一、索引管理

1. 创建索引

创建一个索引,使用的请求为 PUT /<index>,其中 <index> 为索引名称。同时,还可以指定如下内容:索引的设置 settings、索引中字段的映射 mappings、索引的别名 aliases

下面通过一些示例来演示如何创建索引:

创建一个索引

请求:

PUT /my-index-000001

响应:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my-index-000001"
}

其中 acknowledged 表示在超时之前,集群中是否成功创建了索引;而 shards_acknowledged 表示在超时之前,索引中的每个分区是否启动了所需数据的分区副本。

索引设置

创建索引时,可以对更改索引设置。

请求:

PUT /my-index-000002
{
  "settings": {
    "index": {
      "number_of_shards": 3,  
      "number_of_replicas": 2 
    }
  }
}

number_of_shards为该索引的分区数,默认值为1;number_of_replicas 为所有主分区的副本数,默认值为1。

可以简写:

PUT /my-index-000002
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

响应:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my-index-000002"
}

更多索引设置,请访问:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/index-modules.html#index-modules-settings

映射字段

创建索引时,可以映射字段。

请求:

PUT /my-index-000003
{
  "mappings": {
    "properties": {
      "field1": {"type": "boolean"},
      "field2": {"type": "text"}
    }
  }
}

响应:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my-index-000003"
}

别名

创建索引时,还可以为该索引设置别名,并且可以添加多个别名。

请求:

PUT /my-index-000004
{
  "aliases": {
    "alias_1": {}
  }
}

响应:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my-index-000004"
}

2. 获取索引

获取一个索引,可以使用 GET /<target> 请求,其中 <target> 为索引名称。

请求:

GET /my-index-000003

响应:

{
  "my-index-000003" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "field1" : {
          "type" : "boolean"
        },
        "field2" : {
          "type" : "text"
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "my-index-000003",
        "creation_date" : "1672816886070",
        "number_of_replicas" : "1",
        "uuid" : "J50MtHoeTa-2T6ugNxIQ7Q",
        "version" : {
          "created" : "7120199"
        }
      }
    }
  }
}

3. 删除索引

删除索引同时也会删除其文档、分区和元数据。可以使用 DELETE /<index> 请求,其中 <index> 为索引名称。

请求:

DELETE /my-index-000004

响应:

{
  "acknowledged" : true
}

4. 判断索引是否存在

可以使用 HEAD <target> 请求来检查索引是否存在,其中 <target> 为索引名或别名。

请求:

HEAD /my-index-000003

存在 - 响应:

200 - OK

不存在 - 响应:

{"statusCode":404,"error":"Not Found","message":"404 - Not Found"}

二、映射管理

1. 获取映射

可能通过 GET /<target>/_mapping 请求来查询一个索引的映射,其中 <target> 为索引名称。

请求:

GET /my-index-000003/_mapping

响应:

{
  "my-index-000003" : {
    "mappings" : {
      "properties" : {
        "field1" : {
          "type" : "boolean"
        },
        "field2" : {
          "type" : "text"
        }
      }
    }
  }
}

如果索引没有添加映射字段,结果中的 mappings 后面为空。

2. 添加映射字段

我们知道,创建索引时可以添加映射字段,如果创建完索引再添加别的索引,可以使用PUT /<target>/_mapping 命令,其中 <target> 为索引名称。

请求:

PUT /my-index-000003/_mapping
{
  "properties": {
    "field3": {
      "type": "keyword"
    },
    "field4": {
      "type": "text"
    }
  }
}

响应:

{
  "acknowledged" : true
}

三、文档管理

1. 创建文档

创建文档有多种方式:

POST /<target>/_doc/

通过该请求可以创建一个文档,文档ID由 Elasticsearch 自动分配。其中 <target> 为索引名称

请求:

POST /my-index-000003/_doc
{
  "field1": true,
  "field2": "第一个",
  "field3": "1",
  "field4": "第一个field4"
}

响应:

{
  "_index" : "my-index-000003",
  "_type" : "_doc",
  "_id" : "WETPnoUBbyDvl79vwHTp",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 8,
  "_primary_term" : 1
}

通过响应结果可以看出,该结果为created操作,分配的文档ID WETPnoUBbyDvl79vwHTp,版本号为 1

POST /<target>/_create/<_id>

如果想要指定文档ID,可以使用该请求,其中<target>为索引名称,<_id>为指定的文档ID。注:如果文档 ID 已存在,则执行失败。

请求:

POST /my-index-000003/_create/2
{
  "field1": true,
  "field2": "第二个",
  "field3": "2",
  "field4": "第二个field4"
}

响应:

{
  "_index" : "my-index-000003",
  "_type" : "_doc",
  "_id" : "2",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 9,
  "_primary_term" : 1
}

PUT /<target>/_create/<_id>

也可以使用该 PUT 方法来创建文档,效果与 POST /<target>/_create/<_id> 一样。

请求:

PUT /my-index-000003/_create/3
{
  "field1": false,
  "field2": "第三个",
  "field3": "3",
  "field4": "第三个field4"
}

响应:

{
  "_index" : "my-index-000003",
  "_type" : "_doc",
  "_id" : "3",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 10,
  "_primary_term" : 1
}

PUT /<target>/_doc/<_id>

该方式可以指定文档ID,其中<target>为索引名称,<_id>为指定的文档ID

请求:

PUT /my-index-000003/_doc/4
{
  "field1": false,
  "field2": "第四个",
  "field3": "4",
  "field4": "第四个field4"
}

响应:

{
  "_index" : "my-index-000003",
  "_type" : "_doc",
  "_id" : "4",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 11,
  "_primary_term" : 1
}

如果检测到该文档ID已存在,会覆盖原内容,并且版本+1

请求:

PUT /my-index-000003/_doc/4
{
  "field1": false,
  "field2": "第四个_2",
  "field3": "4",
  "field4": "第四个field4_2"
}

响应:

{
  "_index" : "my-index-000003",
  "_type" : "_doc",
  "_id" : "4",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 12,
  "_primary_term" : 1
}

从响应结果可以看出是updated操作,并且版本升级到了2

2. 修改文档

修改文档可以使用POST /<index>/_update/<_id>方法,该修改可以指定字段进行局部更新

POST /<index>/_update/<_id>

更新文档字段值

可以局部更新指定字段的值。注意:更新的字段需要在doc对象下。

请求:

POST /my-index-000003/_update/4
{
  "doc": {
    "field2": "第四个_4",
    "field4": "第四个field4_4"
  }
}

响应:

{
  "_index" : "my-index-000003",
  "_type" : "_doc",
  "_id" : "4",
  "_version" : 4,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 14,
  "_primary_term" : 1
}

添加文档字段

为该文档添加一个新的字段,并指定字段值。

请求:

POST /my-index-000003/_update/4
{
  "script": "ctx._source.new_field = 'new_field_value'"
}

响应:

{
  "_index" : "my-index-000003",
  "_type" : "_doc",
  "_id" : "4",
  "_version" : 12,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 22,
  "_primary_term" : 1
}

删除文档字段

为该文档删除一个指定字段。

请求:

POST /my-index-000003/_update/4
{
  "script": "ctx._source.remove('new_field_value')"
}

响应:

{
  "_index" : "my-index-000003",
  "_type" : "_doc",
  "_id" : "4",
  "_version" : 13,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 23,
  "_primary_term" : 1
}

3. 获取文档

获取文档有两种方式

GET <index>/_doc/<_id>

该方法获取文档的详细数据信息

请求:

GET /my-index-000003/_doc/4

响应:

{
  "_index" : "my-index-000003",
  "_type" : "_doc",
  "_id" : "4",
  "_version" : 13,
  "_seq_no" : 23,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "field1" : false,
    "field2" : "第四个_2",
    "field3" : "4",
    "field4" : "第四个field4_2",
    "new_field" : "new_field_value"
  }
}

GET <index>/_source/<_id>

该方法只获取文档字段数据信息

请求:

GET /my-index-000003/_source/4

响应:

{
  "field1" : false,
  "field2" : "第四个_2",
  "field3" : "4",
  "field4" : "第四个field4_2",
  "new_field" : "new_field_value"
}

4. 判断文档是否存在

判断文档是否存在有两个方式,他们的效果是一样的

  • HEAD <index>/_doc/<_id>
  • HEAD <index>/_source/<_id>

请求:

HEAD /my-index-000003/_doc/4

响应(存在):

200 - OK

请求:

HEAD /my-index-000003/_source/5

响应(不存在):

{"statusCode":404,"error":"Not Found","message":"404 - Not Found"}

5. 删除文档

可以使用 DELETE /<index>/_doc/<_id> 方法来删除指定文档。删除会将该文档标记为已删除,并且版本号+1

请求:

DELETE /my-index-000003/_doc/3

响应:

{
  "_index" : "my-index-000003",
  "_type" : "_doc",
  "_id" : "3",
  "_version" : 2,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 26,
  "_primary_term" : 1
}

四、总结

  • PUT /<index> 创建索引
  • GET /<target> 获取索引
  • DELETE /<index> 删除索引
  • HEAD <target> 判断索引是否存在
  • GET /<target>/_mapping 获取映射
  • PUT /<target>/_mapping 修改映射字段
  • POST /<target>/_doc/ 创建文档
  • POST /<target>/_create/<_id> 创建文档
  • PUT /<target>/_create/<_id> 创建文档
  • PUT /<target>/_doc/<_id> 创建/覆盖文档
  • POST /<index>/_update/<_id> 更新文档
  • GET <index>/_doc/<_id> 获取文档
  • GET <index>/_source/<_id> 获取文档
  • HEAD <index>/_doc/<_id> 判断文档是否存在
  • HEAD <index>/_source/<_id> 判断文档是否存在
  • DELETE /<index>/_doc/<_id> 删除文档

系列文章

🔥 Elasticsearch 核心技术(一):Elasticsearch 安装、配置、运行(Windows 版)
🔥 Elasticsearch 核心技术(二):elasticsearch-head 插件安装和使用
🔥 Elasticsearch 核心技术(三):Kibana 安装、配置、运行(Windows 版)

热门专栏

👍 《Python入门核心技术》
👍 《IDEA 教程:从入门到精通》
👍 《Java 教程:从入门到精通》
👍 《MySQL 教程:从入门到精通》
👍 《大数据核心技术从入门到精通》

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿拉伯数转中文与英文[找到规律,抽象问题,转换成代码]

阿拉伯数转中文与英文前言一、阿拉伯数字转换1、阿拉伯数字转中文a、案例b、解决方案2、阿拉伯数转英文a、案例b、解决方案总结参考文献前言 如果思考算法的解法方案是一种模拟&#xff0c;那么这一般不是个好的解决方案。对于一个复杂的问题&#xff0c;挖掘其中的规律&#…

制造业管理系统如何帮助企业快速应对品质异常问题?

在企业生产制造过程中&#xff0c;成品发生品质异常问题是不可避免的。当成品出现问题&#xff0c;为了有效防范批量品质事故&#xff0c;品管需要快速判断可能是哪个材料引起的&#xff0c;需要知道这批成品是谁做的&#xff0c;什么时候做的&#xff0c;提供材料的分别是哪个…

MySQL基础篇语句--DDL语句

SQL简介 当面对一个陌生的数据库时,通常需要一种方式与它交互&#xff0c;以完成用户所需要的各种工作&#xff0c;这个时候&#xff0c;就要用到SQL语言了。 SQL是Structure Query Language(结构化查询语言)的缩写&#xff0c;它是使用关系模型的数据库应用语言&#xff0c;由…

传统推荐模型(一)协同过滤算法_UserCF和ItemCF

传统推荐模型&#xff08;一&#xff09;协同过滤算法_UserCF 1、UserCF 协同过滤就是协同大家的反馈、评价和意见一起对海量的信息进行过滤&#xff0c;从中筛选出目标用户可能感兴趣的信息的推荐过程。 物品1物品2物品3物品4物品5用户131233用户243435用户333154用户41552…

OneNote(或印象笔记)迁移到Joplin的方法

2023年1月10日实操记录简介背景是必须卸载OneNote&#xff0c;所以要迁移笔记。告别了用了23年的Outlook &#xff0c;和10年左右的OneNote&#xff0c;小伤感&#xff0c;自此一别 就不能用练就的VBA技能在Excel和Access中处理数据了。。。基本前提Joplin支持.enex格式文件的导…

总结述职报告撰写方法,报告目的、对象、内容、技巧等

导语 又到年末时&#xff0c;述职报告再一次席卷而来。这篇文章将带来干货满满的述职报告撰写方法&#xff0c;包括述职目的、对象、内容、技巧等多个方面。 一、述职目的 有多少人认为&#xff0c;述职只是走个形式&#xff0c;走个过场的&#xff1f; 如果你这样认为&#x…

2023济南制药机械展|中国(济南)国际制药机械与包装技术展览会

2023中国&#xff08;济南&#xff09;国际制药机械与包装技术展览会将于2023年3月30-4月1日在山东国际会展中心&#xff08;济南市槐荫区日照路1号&#xff09;同期举办&#xff1a;2023第11届国际生物发酵展2023国际生化仪器与实验室装备展2023国际生物技术与生物制药展支持单…

以太网链路聚合与交换机堆叠、集群

网络的可靠性 网络的可靠性指当设备或者链路出现单点或者多点故障时保证网络服务不间断的能力网络的可靠性可以从单板、设备、链路多个层面实现 一般重要的核心设备都有一定的冗余 s12700E-8机框正面结构 框式交换机由机框、电源模块、风扇模块、主控板、交换网板&#xff…

CSS入门六、常用技巧

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…

人工智能-linux高级操作命令

目录1、 重定向命令2、查看文件内容命令3、链接命令3.1 软链接4、查找文件内容命令5、查找文件命令6、压缩和解压缩文件7、文件权限命名8、获取管理员权限的相关命令9、远程登陆、远程拷贝10、软件安装与卸载11、vim介绍1、 重定向命令 将目录下的文件名全部写入新文件 touch …

场景编程集锦 - BMI指数与健身达人

1. 场景描述 BMI指数&#xff08;身体质量指数&#xff0c;英文Body Mass Index&#xff09;是用体重公斤数除以身高米数的平方得出的数字&#xff0c;是目前国际上通用的衡量人体胖瘦程度以及是否健康的一个标准。“身体质量指数”这个概念&#xff0c;是由19世纪中期的比利时…

马蹄集 宽度与对齐

宽度与对齐 难度&#xff1a;白银 时间限制&#xff1a;1秒巴占用内存&#xff1a;64M 输出455、-123、987654&#xff0c;宽度为5&#xff0c;分别左对齐和右对齐 格式 输入格式&#xff1a;无 输出格式&#xff1a;输出为整型&#xff0c;空格分隔。每个数的输出占一行 #inc…

[34]. 在排序数组中查找元素的第一个和最后一个位置

在排序数组中查找元素的第一个和最后一个位置题目算法设计&#xff1a;二分查找题目 算法设计&#xff1a;二分查找 进行两次二分查找&#xff08;定制版本&#xff09;&#xff0c;第一次先查找【第一个大于等于target的数】&#xff0c;第二次再查找【第一个大于target的数】…

Mac安装python3并配置环境变量

文章目录homebrew 安装 python3配置 python3 环境变量homebrew 安装 python3 可以用 homebrew 安装&#xff0c;也可以官网下载安装&#xff0c;我这里选择使用 homebrew 安装&#xff0c;没有装 homebrew 的小伙伴请自行百度 brew install python3我们执行下 python3 发现可…

Centos7安装高版本zshzim框架安装powerlevel10k

1. 安装高版本zsh 1.1 卸载低版本zsh sudo yum remove zsh -y1.2 下载源码 源码&#xff1a;https://zsh.sourceforge.io/Arc/source.html # 下载 wget https://jaist.dl.sourceforge.net/project/zsh/zsh/5.9/ # 解压 $ tar xvf zsh-5.9.tar.xz1.3 编译安装 yum install …

新应用——养老院管理应用,信息化的多功能管理应用

养老院管理系统专门为医养结合的养老机构量身打造的信息化管理系统&#xff0c;还适用于社区医院&#xff0c;包含诊断、病历、财务、物资、照护记录、处方等功能点。此应用分为经营管理、长者管理、物资库存、财会综合等四个大模块&#xff0c;全方面打造适用于养老院&#xf…

精准招聘!一图了解2023牛客校招专场

当「简历海投」成为当代大学生一种「硬核求职」的方式&#xff0c;如何精准地找到与招聘目标相匹配的专业人才成为HR校园招聘工作中的一大难点。为了帮助企业解决这些难题&#xff0c;牛客为企业推出了「牛客招聘专场」助力企业做好雇主品牌传播&#xff0c;提升收到的简历质量…

自动驾驶道路曲率计算

自动驾驶系列 车道曲率和中心点偏离距离计算 文章目录自动驾驶系列目标一、曲率的介绍圆的曲率曲线的曲率二、实现1.计算曲率半径的方法&#xff0c;代码实现如下&#xff1a;总结目标 知道车道曲率计算的方法 知道计算中心点偏离距离的计算 一、曲率的介绍 曲线的曲率就是针…

CSS入门五、定位

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…

Revit出图问题:打印机中新建纸张尺寸?批量导出图纸?

一、Revit中在打印机中新建纸张尺寸 Revit导出PDF图纸&#xff0c;如何在打印机中新建纸张的尺寸&#xff1f; 在导出PDF的时候&#xff0c;我们需要将图纸放在合适的纸张页面上&#xff0c;而这个时候系统又没有提供所需的页面尺寸&#xff0c;如图1所示。 这种情况下我们该如…