ES入门七:索引管理Api的使用

索引设置

在传家索引的时候,可以在“settings”字段中指定索引的位置。numbers_of_shards和nubmer_of_replicas 是索引非常重要的两个配置,设置它们值的示例如下:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们还可以动态修改索引的位置,其示例如下:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
如上示例,我们设置了索取test_index拥有2个副本分片。但值得注意的是,numbers_of_shards设定后是无法改变的,要修改索取的分片数量可以通过Reindex Api或者收缩索引的Api做处理

定义索引的Mapping

在创建索引的时候,可以设置索引的Mapping。其示例如下:
image.png
如上示例,使用“mapping”字段可以指定创建索引时的Mapping设置

如果增加了某些需求,想要增加索取的Mapping的设置,其示例如下:
image.png
需要记住,在Mapping中定义好的字段时不能修改的,如果修改将会返回404

Reindex Api

上面提到,如果Mapping中字段已经定义就不能修改其字段的类型属性了,同时也不能改变分片的数量,如果需求上必须我们修改的时候怎么办哪?可以使用Reindex Api来解决这个问题

我们需要先创建一个新的索引,使其Mapping等设置满足新的需求,然后将数据从旧的索引中迁移到新的索引。Reindex Api的使用示例如下:

# 删除索引,如果存在的话
DELETE test_index# 创建索引
PUT test_index
{"mappings": {"properties": {"test_id": { "type": "keyword" },"test_name": { "type": "keyword" }}}
}# 插入数据
PUT test_index/_doc/1
{"test_id": "123","test_name": "name tes"
}# 创建新的索引,并且满足需求
PUT test_index_reindex
{"mappings": {"properties": {"test_id": { "type": "keyword" },"test_name": { "type": "text" }}}
}# 执行 reindex 操作
POST _reindex
{"source": { "index": "test_index" },"dest": { "index": "test_index_reindex" }
}# 在迁移数据后的 test_index_reindex 索引中获取数据
GET test_index_reindex/_doc/1

需要注意的是,如果索引中的数据很多,并且是需要同步返回的情况下,在Kibana中执行这个操作可能会发生超时的现象。可以使用wait_for_completion=false参数来进行异步操作,其示例如下:

# 异步地执行 _reindex
POST _reindex?wait_for_completion=false
{"source": { "index": "test_index" },"dest": { "index": "test_index_reindex" }
}# 结果
{"task" : "26d0dAjcRYygigd0shfz5w:35995695"
}

如上示例,异步的reindex操作返回的结果将是一个task_id,可以使用Task Api查看这个任务的情况:

GET /_tasks/26d0dAjcRYygigd0shfz5w:35995695

索引模板

可以使用 Index templates 按照一定的规则对新创建的索引进行Mapping设定和Settings设定。需要注意的是,索引模版只在索引被创建的时候起作用。创建一个模版:

PUT /_index_template/my_tmp1
{"index_patterns" : ["tmp_*"], # 以tmp_ 开头的索引都引用这个模板"priority" : 1, # 指定优先级, 数值越大优先级越高, 这个模板就越先被应用"template": {"settings" : {"number_of_shards" : 3},"mappings": {"date_detection": false}}
}

如上示例,我们创建了一个索引的模版,当以后有tmp_开头的索引创建都引用这个模版,会设置number_of_shard为3和Mappin的date_detection为false。

模版中的“priority”指定了模版的优先级,其数值越大优先级越高,这个模版就越先被应用

打开和关闭索引

当我们需要执行某些操作的时候,需要关闭索引或者打开索引,可以使用_close Api和_open Api来关闭或者打开索引

关闭索引的操作开销很小,并且会阻塞读写操作,关闭后的索引不再允许执行打开状态是的所有操作。关闭和打开索引的示例如下:
** **

# 关闭索引
POST /test_index/_close# 打开索引
POST /test_index/_open

判断索引是否存在

当我们知道一个索引是否存在的时候,可以使用Exist Api来判断索引是否存在,其示例如下:

HEAD test_index

如上示例,如果索引存在,可以返回的HTTP状态码为200,不存在的话为404

收缩索取

如果我们一开始创建的索引其分片太多,可以使用收缩索引的Api 将索引收缩为具有较少主分配的新索引

**收缩后的新索引的主分配数量必须为源索引主分配数量的一个因子。**例如,源索引的主分片分配了12个,那么收缩的新索引的主分片为1、2、3、4、6
在进行索引收缩前需要进行以下操作:

  1. 源索引必须只读
  2. 源索引索引的副本(主分片也行、副分片也行),必须在同一个节点上,也就是在这个节点上必须有这个索引的全部数据,不管分片数据是主分片的还是副本分片的。
  3. 源索引的状态必须为健康状态(green)

下面的示例我们将拥有12个主分片,2个副本分片的索引(test_index)收缩为拥有3个主分片和1个副分片的索引(test_index_new)
新创建索引 test_index,设置 number_of_shards=12, number_of_replicas=2

# 删除索引,如果存在的话
DELETE test_index# 创建索引
PUT test_index
{"mappings": {"properties": { "test_name": { "type": "keyword"} }},"settings": {"number_of_shards": 12, "number_of_replicas": 2}
}

创建后的索引,在Cerebro中查看如下:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下面将索引test_index 所有的主分片转移到节点 my_node_1上,并且设置索引的副本分片数量为0,设置这个索引为只读:

PUT /test_index/_settings
{# 分片分配到 my_node_1 节点"index.routing.allocation.require._name": "my_node_1","index.number_of_replicas": 0,"index.blocks.write": true  
}

ok,这个时候 test_index满足收缩索引的3个条件了,下面开始收缩:

POST /test_index/_shrink/test_index_new
{"settings": {"index.number_of_replicas": 1,"index.number_of_shards": 3,"index.routing.allocation.require._name": null, # 系统随机分配分片"index.blocks.write": null # 不阻塞写操作}
}

如上示例,我们设置新索引的主分片数量为3,每个主分片的副本数量为1,并且这些分片是系统自动、随机分配的,不阻塞新索引的写操作

最终在Cerebro可以看到,这两个索引的信息如下:
image.png

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣404 左叶子之和 Java版本

文章目录 题目描述解题思路代码 题目描述 给定二叉树的根节点 root ,返回所有左叶子之和。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 2…

docker pull 拉取失败,设置docker国内镜像

遇到的问题 最近在拉取nginx时,显示如下错误:Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled (Client.Timeout exceeded while awaiting headers)。 这个的问题是拉取镜像超时,通过检索…

JavaScript基础3之面向对象关于面向过程、函数式编程、对比、构造函数、原型

JavaScript基础 面向对象面向过程函数式编程命令式编程函数式编程特性副作用透明引用不可变变量函数是一等公民 常见的函数式编程模型 面向对象为什么要使用面向对象封装继承多态 对比面向过程函数式编程面向对象 构造函数原型constructor使用场景 对象原型 面向对象 面向过程…

【教3妹学编程-算法题】超过阈值的最少操作数 II

2哥 : 叮铃铃,3妹,准备复工了啊,过年干嘛呢,是不是逛吃逛吃,有没有长胖呢。 3妹:切,不想上班,假期能不能重来一遍啊,虽然在家我妈张罗着要给我相亲呢。可是在家还是很好的…

贝叶斯优化双向门控循环单元BO-BIGRU时序预测的matlab实现【源代码】

贝叶斯优化双向门控循环单元简介: 贝叶斯优化双向门控循环单元(BO-BIGRU)是一种结合了贝叶斯优化和双向门控循环单元(BIGRU)的神经网络模型。BIGRU是一种改进的循环神经网络(RNN),它…

使用J-Link | OPENSDA 调试S32K144开发板

一、S32DS下载 使用的开发软件为S32DS,可以到NXP官网下载:链接,也可以通过网盘:链接 二、对S32K144开发板进行调试 调试方法一: S32K144开发板自带一个OPENSDA MCU,我们可以通过一根Mircro USB线连接到电…

MobaXterm无法上传整个文件夹,只能上传的单个文件

问题描述: 本来想使用MobaXterm上传.vscode文件夹上传到服务器,但是选择文件夹打开后只能选择文件夹下面的子文件无法上传整个文件。 解决方案: 1、简单暴力 2、压缩后解压

Stable Diffusion 3报告

报告链接:https://stability.ai/news/stable-diffusion-3-research-paper 文章目录 要点表现架构细节通过重新加权改善整流流量Scaling Rectified Flow Transformer Models灵活的文本编码器RF相关论文 要点 发布研究论文,深入探讨Stable Diffuison 3的…

【组合递归】【StringBuilder】Leetcode 17. 电话号码的字母组合

【组合递归】【StringBuilde】Leetcode 17. 电话号码的字母组合 StringBulider常用方法!!!!!!!!!!!!!!17. 电…

Matlab:元胞自动机

元胞自动机是一种基于离散空间的动态系统,由许多简单单元按照某些规则进行相互作用和演化而形成的复杂结构。元胞自动机可以用于模拟物理、生物、社会等领域的现象,以及进行优化、图像处理、噪声生成等方面的应用。 例1:生命游戏 nextState…

ES入门八:Mapping的详细讲解

什么是Mapping?**Mapping定义了索引中的文档有哪些字段及其类型、这些字段是如何存储和索引的。**每个文档都是一个字段的集合,每个字段都有自己的数据类型,例如我们定义的books索引,其中有book_id、name等字段。所以Mapping的作用…

自动驾驶预测与决策规划(基于运动模型的预测)

欢迎大家关注我的B站: 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 本文为深蓝学院《自动驾驶预测与决策规划》 的学习笔记 目录 1 Constant Velocity模型 2 Constant Turn 模型 1 Constant Velocity模型 Constan…