2012-07-11 48 views
2

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

我查看了IndexWriter代码,看起来像是它的索引编写器的内部操作。我也不想破解IndexWriter。我看到一个名为MergeScheduler的接口。实施这个课程是最好的想法吗?

你有什么想法该怎么做?提前致谢!

回答

1

也许你可以继承你正在使用的MergePolicy(默认值为TieredMergePolicy),并通过覆盖findMerges方法来拦截要合并的段?

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

// use information from mergeSpecifiation 

return mergeSpecification; 
+0

问题是,您需要获取** OneMerge **对象,这是对象具有保护字段(我不想破解lucene)。 – pokeRex110 2012-07-12 10:26:55

+0

'MergePolicy.OneMerge'的'segments'字段是公开的 - 是不是您需要的唯一字段? – 2012-07-12 11:22:50

+0

'MergePolicy.OneMerge'是公开的,但它的字段不是。那么我怎么才能找到哪些细分被合并?只有一个解决方法是一个肮脏的解决方案和它的'MergeSpecification.segString'。 – pokeRex110 2012-07-12 12:11:03