【ES实战】_forcemerge API 使用说明

2023-11-10

_forcemerge API 使用说明

强制合并segment文件

force merge API 允许通过 API 强制合并一个或多个索引。 合并与 Lucene 索引在每个分片中保存的分段数有关。 强制合并操作允许通过合并来减少分段的数量。

此调用将阻塞,直到合并完成。 如果http连接丢失,请求会在后台继续,任何新的请求都会阻塞,直到之前的强制合并完成。

强制合并只能在只读索引时调用。对读写索引执行强制合并可能会产生非常大的分段(每个段>5Gb),并且合并策略永远不会考虑再次合并,直到它主要由被删除的文档组成。这可能会导致非常大的分段留在分片中。

API 语法

POST /twitter/_forcemerge

可选参数

强制合并 API 接受以下请求参数:

参数名 解释
max_num_segments 要合并到的分段数。 要完全合并索引,请将其设置为1。 默认为简单地检查合并是否需要执行,如果需要,则执行它。默认值-1
only_expunge_deletes 合并过程是否应该只删除其中包含删除的分段。 在 Lucene 中,文档不会从段中删除,只是标记为已删除。 在分段的合并过程中,会创建一个没有这些删除的新段。 这个标志只允许合并有删除的分段。 默认为false。 请注意,这不会覆盖 index.merge.policy.expunge_deletes_allowed 阈值。
flush 强制合并后是否应该执行刷新。 Defaults to true.
POST /kimchy/_forcemerge?only_expunge_deletes=false&max_num_segments=100&flush=true

多索引操作

强制合并 API 可以通过一次调用应用于多个索引,甚至可以应用于_all索引。 每个节点一次在一个分片上执行多索引操作。 强制合并使正在合并的分片的存储量暂时增加,在 max_num_segments 设置为 1 的情况下,它的大小会增加一倍,因为所有段都需要重新写入一个新的分段。

POST /kimchy,elasticsearch/_forcemerge

POST /_forcemerge

使用案例

查找存在删除文档的索引

GET _cat/indices?v&s=docs.deleted:desc
green  open   index1                             89fFEwgnSi2bUoE1JKzsNg   4   2   31770267     20108891     49.2gb         16.1gb
green  open   index2                       malrWzpfR2yMGIKHc_N20w  36   1 2268274293    405861291        1tb        550.5gb

查看线程池情况

GET /_cat/thread_pool/force_merge?v&s=node_name

force_merge线程池是一个fixed类型的,线程数为1且无限阻塞的队列的线程池。这样每个Node上只会有一个执行合并线程的线程。

node_name     name        active queue rejected
es13       force_merge      1     0        0
es13       force_merge      0     0        0
es14       force_merge      1     0        0
es14       force_merge      0     0        0
es15       force_merge      1     0        0
es15       force_merge      0     0        0
es16       force_merge      1     0        0
es17       force_merge      1     0        0
es18       force_merge      1     0        0
es19       force_merge      1     0        0
es20       force_merge      1     0        0

查看segment情况

GET /_cat/segments/indexname1?v&s=docs.deleted:desc,segment

查看任务

GET _tasks?detailed=true&actions=indices:admin/forcemerge*

合并任务会拆分成多个子任务执行。

1 只进行已删除的合并

POST /indexname1/_forcemerge?only_expunge_deletes=true

2 没有限制最大segment数的合并

POST /indexname1/_forcemerge

3 限制最大segment数的合并

POST /indexname1/_forcemerge?max_num_segments=20

注意点

  1. 不能频繁进行强制合并,会使得CPU和I/O变高,增大服务器压力。
  2. 在合并的时候需要有足够的存储空间,合并的方式是先将数据写入新的分段,在删除旧的分段,索引在合并的过程中索引占用的存储空间会增加,最大翻一倍。
  3. 在单纯使用限制最大segment数的合并的时候,结果中会存在满足已删除文档超过10%,没有进行合并的分段,可以再次执行只进行已删除的合并进行再次合并分段。
  4. 对于只读不写的索引,可以进行完全合并,完全合并的意思就是分段数设置为1

源码分析

强制合并分段 _forcemerge API 源码分析

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ES实战】_forcemerge API 使用说明 的相关文章

随机推荐

  • Node.js 学习系列(四)—— 回调函数

    Node js 异步编程的直接体现就是回调 异步编程依托于回调来实现 但不能说使用了回调后程序就异步化了 回调函数在任务完成后就会被调用 Node 使用了大量的回调函数 Node 的所有 API 都支持回调函数 例如 我们可以一边读取文件
  • 【干货】dockerfastdfs集群

    正文 最近整理了一份 Netty 相关的文档干货 讲解很系统 今天分享给大家 看完这份文档你将获得哪些收获 理解当下火热的 Netty 框架 核心概念 开发流程 手写 RPC 框架 聊天室 Tomcat等 对照知识点进行查漏补缺 帮助扫除知
  • 类 AudioInputStream 说明文档 中文版

    javax sound sampled 类 AudioInputStreamjava lang Object java io InputStream javax sound sampled AudioInputStream 所有已实现的接口
  • angular 整理

    文章目录 网址 npm 知识点 参考 https www cnblogs com wjw1014 p 10262309 html 网址 angular https angular cn docs ag grid https www ag g
  • RHEL6.4启动一直在加载界面,无法进入图形化界面的解决办法

    在下在上午的时候将我另一个机器上面的虚拟机拷贝到了我现在用的机器上 发现rhel6 4启动加载的时候一直开在这个界面 如图 就一直卡在这个界面了 我用ctrl shift f1一看 哎 有点迷 咋回事啊 为了验证 我将我原来的机器也打开看了
  • 猪齿鱼平台的部署教程

    以下是基于猪齿鱼平台的部署教程 安装 Docker 在猪齿鱼平台中 应用会运行在 Docker 容器中 所以首先需要安装 Docker 可以按照以下步骤在 CentOS 7 系统上安装 Docker 安装依赖 sudo yum instal
  • kong认证插件添加第二认证方式

    在认证插件对象 如ldap auth 的anonymous 字段添加第二认证方式 查看ldap的插件设置 anonymous 为basic auth的plugin的consumer id 在Authorization中设置认证密码 user
  • vulnhub-sick0s1.2简单靶场提权

    以下均在测试环境进行 遵纪守法 靶场下载地址 https download vulnhub com sickos sick0s1 2 zip 下载后直接用vm导入 网卡NAT模式即可 首先进行信息收集 nmap 192 168 111 0
  • 500报错及故障排除

    500 Internal Server Error 每次打开网页时 浏览器都会向托管站点的服务器发送请求 服务器将返回请求的数据和响应代码 HTTP响应状态代码指示请求是否成功 500到599范围内的代码表示服务器错误 该错误不是由浏览器或
  • 论文英文参考文献[10]的时候后面多空格_毕业论文格式问题批量修改

    今天 给大家介绍一下毕业论文中常见的格式错误批量修改方法 问题一 英文摘要部分或参考文献的英文标点符号检查 采用ENDNOTE ZOTERO这类文献管理软件直接导入的 不存在这类问题 主要针对不会使用软件的而手动复制编写的参考文献 主要涉及
  • Mysql视图

    文章目录 1 简介 2 视图的操作语法 3 视图检查选项 4 视图的更新与作用 1 简介 视图 view 是一种虚拟存在的表 视图中的数据并不在数据库中实际存在 行和列数据来自定义视图的查询中使用的表 并且是在使用视图时动态生成的 通俗来讲
  • 缺页中断过程详解

    缺页中断机构 总而言之 对于我们的缺页的访问 会发生一个缺页中断 缺页中断由当前指令发出 所以属于内中断 中断后该程序就阻塞了 然后等待中断程序结束 再执行 中断程序判断 内存中是否有空闲内存块 如果有 就调入该内存块 并且修改页表项 如果
  • 【thinkphp5】使用tp5开发api接口 定义全局异常处理

    1 新建文件夹以及文件 路径 application lib exception ExceptionHandler php 并键入以下代码
  • Eigen库Vector3d定义及赋值学习

    include
  • JVM--基础--20--对象的创建过程

    JVM 基础 20 对象的创建过程 1 对象的创建过程 讨论的对象限于普通Java对象 不包括数组和Class对象等 虚拟机遇到一条new指令时 过程如下 1 1 类加载 当虚拟机遇到一条new指令时 首先去检查这个指令的参数是否能在常量池
  • 封装一个可变参数打印函数

    在开发中 经常会用到打印 而这些打印在程序运行阶段不需要 仅在调试或开启现象的时候需要 我们用printf来打印往往不能对其进行灵活的控制 这个时候 我们就可以自己封装一个与printf功能相同的打印函数 加一些调试开关 就可以 用到的接口
  • 你真的了解background-position

    background属性是CSS中最常见的属性之一 它是一个简写属性 其包含background color background image background repeat background attachment backgrou
  • Verilog中的变量节选(part-select):中括号[]中的加号(+:)和减号(-:)的作用?

    Verilog 1995 允许在节选范围的索引为常数时从一个向量中节选连续的比特 Verilog 2001 2005 提供了两个新的节选运算符来支持固定宽度的变量节选 和 其语法分别为 lt starting bit gt lt width
  • qt学习笔记(八)之深入QSqlQuery

    在上一节中 我们直接调用QSqlQuery exec 对数据库进行增删改查等简单操作 在项目开发中 为了实现系统的低耦合 我们就必须封装出一个数据库功能模块 一 prepare 首先创建一个头文件 attend db h 初始化数据库操作
  • 【ES实战】_forcemerge API 使用说明

    forcemerge API 使用说明 文章目录 forcemerge API 使用说明 强制合并segment文件 API 语法 可选参数 多索引操作 使用案例 查找存在删除文档的索引 查看线程池情况 查看segment情况 查看任务 1