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

news/2024/11/9 9:37:00/

在这里插入图片描述

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

文章目录

  • 一、索引管理
    • 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.ppmy.cn/news/11347.html

相关文章

云天励飞在科创板获准注册:计划募资30亿元,陈宁为实际控制人

2023年1月10日&#xff0c;证监会发布公告&#xff0c;同意深圳云天励飞技术股份有限公司&#xff08;下称“云天励飞”&#xff09;首次公开发行股票注册。据贝多财经了解&#xff0c;云天励飞于2020年12月8日在科创板递交上市申请&#xff0c;2021年8月6日过会。 本次冲刺上市…

【vue2】组件进阶与插槽详解

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;v-modedl表单双向绑定、ref|$ref操作dom、dynamic动态组件、$nextTick同步、匿名插槽、具…

结构体内存对齐与结构体位段:学习笔记8

目录 一.结构体基础知识 1. 结构体的特殊声明 2. 结构的自引用 3.结构体变量的定义和初始化 二.结构体内存对齐 1.关键概念&#xff1a; 2.计算示例 3.嵌套结构体的内存计算 4.结构体内存对齐的意义 5.定义结构体时的注意事项 6.修改默认对齐数 附&#xff1a;关…

Linux进程状态与系统负载检测

1.基础知识-进程的5个状态进程可以分为五个状态&#xff0c;分别是&#xff1a;1&#xff09;创建状态一个应用程序从系统上启动&#xff0c;首先就是进入创建状态&#xff0c;需要获取系统资源创建进程管理块&#xff08;PCB&#xff09;完成资源分配。2) 就绪状态在创建状态完…

Java多线程案例——定时器

一&#xff0c;定时器1.定时器的概念定时器是Java开发中一个重要的组件&#xff08;功能类似于闹钟&#xff09;&#xff0c;可以指定一个任务在多长时间后执行&#xff08;尤其在网络编程的时候&#xff0c;如果网络卡顿很长时间没有响应用户的需求&#xff0c;此时可以使用定…

Codeforces Round #841 (Div. 2) (A--D)

[TOC](Codeforces Round #841 (Div. 2)(A–D)) A、 Joey Takes Money 1、题目 2、思路 3、代码 #include<iostream>#include<algorithm>#include<cstring>using namespace std;typedef unsigned long long ll;int main(){ll t;cin>>t;while(t--){int…

ArcGIS基础实验操作100例--实验84查找面到直线的最近点位置

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验84 查找面到直线的最近点位置 目录 一、实验背景 二、实验数据 三、实验步骤 &#…

springAOP的注解使用

注解使用导入依赖常用注解&#xff1a;注意&#xff0c;给测试类起名字的时候千万不要定义成Test&#xff0c;测试的方法不可以有参数&#xff0c;不可以有返回值在使用注解的时候&#xff0c;还需要告诉spring应该从哪个包开始扫描,一般在定义的时候都写上相同包的路径需要导入…