2012-07-11 51 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