Lucene中的控制合并段

Lucene中的控制合并段,lucene,merge,segment,Lucene,Merge,Segment,我想在Lucene中控制段合并。更准确地说,我有一个每段缓存,每次有一个合并,我想有一个“回调”,并检查哪个段将被合并 我查看了IndexWriter代码,看起来它是IndexWriter的内部操作。我也不想攻击IndexWriter。我看到一个名为MergeScheduler的接口。实现这个类的最佳方案是什么 你知道怎么做吗?提前谢谢 也许您可以将正在使用的子类化(默认为TieredMergePolicy),并通过覆盖findMerges方法拦截要合并的段,如下所示 MergePolicy.M

我想在Lucene中控制段合并。更准确地说,我有一个每段缓存,每次有一个合并,我想有一个“回调”,并检查哪个段将被合并

我查看了IndexWriter代码,看起来它是IndexWriter的内部操作。我也不想攻击IndexWriter。我看到一个名为MergeScheduler的接口。实现这个类的最佳方案是什么


你知道怎么做吗?提前谢谢

也许您可以将正在使用的子类化(默认为
TieredMergePolicy
),并通过覆盖
findMerges
方法拦截要合并的段,如下所示

MergePolicy.MergeSpecification mergeSpecification = super.findMerges(segmentInfos);

// use information from mergeSpecifiation

return mergeSpecification;

问题是您需要获取OneMerge对象,这些对象具有受保护的字段(我不想攻击lucene)。
MergePolicy的
segments
字段。OneMerge
是公共的——这不是您需要的唯一字段吗?
MergePolicy.OneMerge
是公共的,但它的字段不是。那么,我如何才能找到合并的段呢?只有一种解决方法是脏解决方案及其
MergeSpecification.segString
。您使用的是什么版本?这个API有很多变化,但是在
段中和
段中都是公共的。你说得对,我使用的是Lucene 3.0.3。我将尝试切换。非常感谢。