强制合并的功能为强制合并一个或多个索引,目的是通过索引合并达到减少段的数量,通过POST方法执行_forcemerge API。
强制合并请求在没有执行完成之前,请求会一直被阻塞,直到执行完成才会返回,如果期间该HTTP请求由于网络或者其它原因被断开,合并请求将继续在后台执行,直到完成或发生异常结束。如果已经有强制合并正在执行,后续发起的强制合并请求将被会阻塞,直到当前正在执行的合并请求执行完后才执行。
强制合并应该只针对只读索引执行,因为针对可写的索引执行强制合并,可能会导致非常大的段文件生成(每段大于5Gb),且后续的合并策略会自动忽略这样的大文件,由于这些文件后续不能够执行合并操作,可能导致该文件中都是被删除了的文档,最终导演当前分片中存在非常大的段文件。
强制合并可以操作单个索引,也可以操作多个索引,多个索引之间以英文逗号“,”分隔,也可以操作所有索引。
强制合并单个索引,操作如下:
POST /new_index/_forcemerge
{}
强制合并多个索引,操作如下:
POST /new_index,new_index_2/_forcemerge
{}
强制合并全部索引,操作如下:
POST /_forcemerge
{}
响应如下:
{
"_shards" : {
"total" : 3,
"successful" : 3,
"failed" : 0
}
}
响应显示待处理的总分片数为3个,成功处理3个,失败为0个。
上面的示例都没有带参数,强制合并API可以接收一些参数,用于调整其行为。
强制合并的参数
参数名称
说明
max_num_segments
设置需要合并的段数。如果需要整个索引完全合并,则将该值设置为1。默认情况下会检查合并操作是否需要执行,如果需要才执行,否则就不执行。
only_expunge_deletes
合并过程是否仅操作哪些包含了被删除文档的段,将这些段中未标识为删除的内容放到一个新创建的段中,然后将这些包含了被删除文档的段全部删除。
注:这不会覆盖index.merge.policy.expunge_deletes_allowed阈值。
flush
是否应在强制合并后执行刷新,默认为true。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved