elasticsearch 为什么分层合并策略比其他策略更好?,elasticsearch,lucene,elasticsearch,Lucene" /> elasticsearch 为什么分层合并策略比其他策略更好?,elasticsearch,lucene,elasticsearch,Lucene" />

elasticsearch 为什么分层合并策略比其他策略更好?

elasticsearch 为什么分层合并策略比其他策略更好?,elasticsearch,lucene,elasticsearch,Lucene,我在学习ElasticSearch和ApacheLucene 最近,我发现ApacheLucene有一些合并策略,但ElasticSearch使用TieredMergePolicy而不是其他合并策略,如LogMergePolicy和LogByteSizeMergePolicy 所以我一直在搜索关于TieredMergePolicy的信息。我找到了算法,但我不明白为什么TieredMergePolicy比其他策略更好(我的意思是在一般情况下,而不是特殊情况下) 为什么在段合并时选择相似大小的段很重

我在学习ElasticSearch和ApacheLucene

最近,我发现ApacheLucene有一些合并策略,但ElasticSearch使用TieredMergePolicy而不是其他合并策略,如LogMergePolicy和LogByteSizeMergePolicy

所以我一直在搜索关于TieredMergePolicy的信息。我找到了算法,但我不明白为什么TieredMergePolicy比其他策略更好(我的意思是在一般情况下,而不是特殊情况下)

为什么在段合并时选择相似大小的段很重要,以及它如何影响整体性能


请帮帮我。

TieredMergePolicy首先通过计算给定的总索引大小、最小段大小(地板)、合并和允许您设置允许宽度的新配置maxSegmentsPerTier,计算“完美对数楼梯”需要多少步数,计算索引中应包含多少段的允许“预算”(段数)这很好,因为它将一次要合并的段数与楼梯的宽度分离。

在这个主题中,我发现了以下陈述,它提供了一些关于
分层合并策略的好处的见解,而不是Lucene的定义
LogByteSizeMergePolicy
分层合并策略之前的ult合并策略

TieredMergePolicy
LogByteSizeMergepolicy
之间的区别在于前者可以合并非相邻的段,并区分一次允许合并的最大段数
setMaxMergeAtOnce(int v)
和层
setegmentspertier中允许的最大段数(双v)

对于
TieredMergePolicy
的更广泛的解释,一个很好的来源是类的注释。以下信息来自该来源,可在ab Apache 2许可证下获得:

根据每层允许的段数合并大小大致相同的段。 这类似于
LogByteSizeMergePolicy
,只是此合并策略能够合并 非相邻段,并将一次合并的段数(
setMaxMergeAtOnce
)与每层允许的段数(
setSegmentsPerTier
)分开。 此合并策略也不会过度合并(即级联合并)

对于正常合并,此策略首先计算允许合并的段数的“预算” 在索引中。如果索引超出预算,则策略将通过减小大小对段进行排序 (按百分比按比例删除),然后查找成本最低的合并。合并成本由 合并的“倾斜”组合(最大段的大小除以最小段), 总合并大小和百分比删除回收,以便合并具有较低的倾斜度、较小的大小和百分比 那些回收更多删除的,会受到青睐。 如果合并将生成大于“setMaxMergedSegmentMB”的段,则 策略将合并较少的段(如果该段已删除,则一次最多合并1个),以保持 部门规模低于预算。 注意:此策略可自由合并非相邻段;如果这是一个问题,请使用“LogMergePolicy”。 注意:此策略总是按段的字节大小合并,总是按比例合并 删除百分比 注意:从Lucene 7.5开始,有几个变化: +默认情况下,`findForcedMerges`和`findForcedDeletesMerges`)遵循最大段大小。 +当使用“maxSegmentCount”而不是1调用“findforcedmerges”时,结果索引为
不一定会,我已经读过了,但我不明白。你能用其他方式解释一下吗?@Halim_Kim如果我的答案回答了你的问题,请记住点击我答案旁边的复选框接受。