聊一聊Elasticsearch的索引(2)

news/2024/12/5 5:26:10/

1、索引状态的管理

对索引状态的管理操作包括:清空缓存(clear cache)、刷新索引(refresh index)、冲洗索引(refresh index)、强制合并(force merge)、关闭索引(close index)、冻结索引(freeze index)。

1.1、清空缓存(clear cache)

ES使用的缓存有三类:节点的查询缓存、分片的请求缓存、字段数据(fielddata)缓存。fielddata是一种缓存于内存中的数据结构,它是一个文档主键指向每个字段数据的映射,类似于数据库中的表结构。

我们可以使用以下代码来清空某类缓存:

// 清空字段数据缓存
POST /{索引名称}/_cache/clear?fielddata=true// 清空节点的查询缓存
POST /{索引名称}/_cache/clear?query=true// 清空分片的请求缓存
POST /{索引名称}/_cache/clear?request=true​​

如果要想把索引的所有类型的缓存都一次性清空,则可以使用以下代码:

POST /{索引名称}/_cache/clear
1.2、刷新索引(refresh index)和 冲洗索引(refresh index)

数据写入到索引的时候,并不会直接写入到磁盘上,因为写入磁盘的成本比较高,会按着一定流程将数据周期性的持久化到磁盘上。索引数据写入磁盘的过程如下图:
在这里插入图片描述
整个过程大体分为4步:

  1. 将数据写入到缓冲区和事务日志中,此时写入的数据还不能被搜索到。
  2. 通过「刷新索引」将缓冲区中的数据写入到文件系统缓存。
  3. 通过「冲洗索引」将文件系统缓存中的数据写入到磁盘中。
  4. 清空事务日志(每次写入磁盘后会清空事务日志,正常情况下,一趟正常流程下来,事务日志最后应该是空的)。

对于事务日志的作用:假设ES宕机,它会在下次启动的时候自动将事务日志中的数据恢复到磁盘上,以此来减少数据丢失。

1.3、强制合并(force merge)

一个索引可以对应一个或多个主分片,每个分片实质上就是一个Lucene索引,一个Lucene索引又包含一个或多个段(segment)。

数据文档从索引中删除的时候,并不是真正的从磁盘上删除,而是给这个要删除的数据文档设置一个删除标记。

「强制合并」要做的就是将零碎的小段合并一个大段并且将标记为删除的数据索引真正的从磁盘中去除掉,借此可以将被标记为删除的数据文档所占据的空间释放出来。

1.4、关闭索引(close index)

对于ES中那些业务上不需要但是又不能删除的索引,我们可以通过「关闭索引」使得被关闭的所以不再接收读写请求。索引被关闭后,该索引在集群中相关的内部数据也会被销毁。

关闭索引和重新打开索引的操作如下:

// 关闭索引
POST /{索引名称}/_close// 重新打开索引
POST /{索引名称}/_open
1.5、冻结索引(freeze index)

针对那些不会再被写入数据,且偶尔需要查询的索引,我们可以选择「冻结索引」。索引一旦被冻结,则只允许读数据,不能再写数据。

查询被冻结的索引时,ES会实时构建索引的每个分片的瞬时数据结构,并在完成查询后将这些数据结构删除。

冻结索引和解冻索引的操作如下:

// 关闭索引
POST /{索引名称}/_freeze// 重新打开索引
POST /{索引名称}/_unfreeze

2、索引的块

我们可以通过索引的块(blocks)阻止对某个索引的写请求和读请求,即使某索引称为只写或只读的状态。

索引的块的配置如下:

配置含义
index.blocks.read_only设置为true时,索引及元数据变为只读状态,不可写入、不可删除
index.blocks.read_only_allow_delete设置为true时,与index.blocks.read only类似但可以删除索引
index.blocks.read设置为true时,禁止索引的读取操作
index.blocks.write设置为true时,禁止索引的写入操作,但是可以写入元数据
index.blocks.metadata设置为true时,阻止读写元数据

假设我们要把某个索引设置为只读的状态,命令如下:

PUT {索引名称}/_settings
{"index.blocks.read_only":"true"}

3、参考文献

  • 《Elasticsearch数据搜索与分析实战》——王深湛

上一篇:《聊一聊Elasticsearch的索引(1)》
下一篇:无(本篇为最终章)


http://www.ppmy.cn/news/1551234.html

相关文章

php+Mysql单页支持不同数据结构不同查询条件查搜多表实例

phpMysql单页支持不同数据结构不同查询条件查搜多表实例 本来还要增加删 改 新增的&#xff0c;眼睛需要休息所以放弃后续制作(增删改代码已删或注释) 直接用可以用于自己多表查搜&#xff0c;界面还可以&#xff1b;有兴趣的可以自己二次开发成改删增 <?php function co…

java jvm部分命令 ~~还在完善中

命令整理 jps -q 只输出进程号 -m main 函数的参数 -l 主类全名 -v 输出jvm参数 jstat jstat -gc pid 1000 10 class gc gccapacity gcutil gccause gcnew gcnewcapacity gcold gcoldcapacity compiler printcompilation gcmetacapacity jinfo -sysprops pid -flags pid -flag…

# issue 7 TCP回声服务器和客户端

一、TCP/IP协议栈 为什么需要理解协议栈&#xff1f; 学习C/C就是要懂底层的原理。不然永远是“调包侠” 根据数据传输方式的不同&#xff0c;基于网络协议&#xff08;这里是指基于TCP/IP协议&#xff09;的套接字一般分为TCP 套接字和UDP 套接字。因为TCP 套接字是面向连接的…

【docker集群应用】Docker数据管理与镜像创建

文章目录 Docker数据管理数据卷&#xff08;Data Volumes&#xff09;示例 数据卷容器&#xff08;Data Volume Containers&#xff09;示例 端口映射容器互联 Docker镜像的创建方法基于现有镜像创建1.首先启动一个镜像&#xff0c;在容器里做修改2.然后将修改后的容器提交为新…

linux实时操作系统xenomai看门狗(watchdog)机制及作用介绍

版权声明&#xff1a;本文为本文为博主原创文章&#xff0c;转载请注明出处 https://www.cnblogs.com/wsg1100。如有错误&#xff0c;欢迎指正。 文章目录 一、前言PREEMPT-RT&#xff08;RT Throttling&#xff09; 一、xenomai watchdog介绍二、xenomai watchdog工作原理三、…

Flink四大基石之State

State state 可以理解为-- 历史计算结果 有状态计算和无状态计算 无状态计算: 不需要考虑历史数据, 相同的输入,得到相同的输出!如:map, 将每个单词记为1, 进来一个hello, 得到(hello,1),再进来一个hello,得到的还是(hello,1) 有状态计算: 需要考虑历史数据, 相同的输入,可…

T507 buildroot linux4.9之RTC8563开发调试

文章目录 前言一、硬件确认1.1、RTC8563硬件二、驱动配置2.1、驱动位置2.2、使用config宏配置驱动2.3、DTS配置三、断电重启时间不保存分析四、解决问题五、测试前言 调试T507的RTC8563,解决中调试遇到的问题 一、硬件确认 1.1、RTC8563硬件 通过原理图确认 RTC8563 硬件的…

2024年12月可以报考的人工智能证书

《新质技术之第九期生成式AI、大模型、多模态技术开发与应用研修班》 2024年12月13日 — 2024年12月17日 杭州&#xff08;同时转线上直播&#xff09; &#xff08;13日报到发放上课材料&#xff0c;14日-17日上课&#xff09;