| Index: src/java/org/apache/lucene/index/SegmentMerger.java |
| =================================================================== |
| --- src/java/org/apache/lucene/index/SegmentMerger.java (revision 320607) |
| +++ src/java/org/apache/lucene/index/SegmentMerger.java (working copy) |
| @@ -311,9 +311,9 @@ |
| resetSkip(); |
| for (int i = 0; i < n; i++) { |
| SegmentMergeInfo smi = smis[i]; |
| - TermPositions postings = smi.postings; |
| + TermPositions postings = smi.getPositions(); |
| int base = smi.base; |
| - int[] docMap = smi.docMap; |
| + int[] docMap = smi.getDocMap(); |
| postings.seek(smi.termEnum); |
| while (postings.next()) { |
| int doc = postings.doc(); |
| Index: src/java/org/apache/lucene/index/SegmentMergeInfo.java |
| =================================================================== |
| --- src/java/org/apache/lucene/index/SegmentMergeInfo.java (revision 320607) |
| +++ src/java/org/apache/lucene/index/SegmentMergeInfo.java (working copy) |
| @@ -23,8 +23,8 @@ |
| int base; |
| TermEnum termEnum; |
| IndexReader reader; |
| - TermPositions postings; |
| - int[] docMap = null; // maps around deleted docs |
| + private TermPositions postings; // use getPositions() |
| + private int[] docMap; // use getDocMap() |
| |
| SegmentMergeInfo(int b, TermEnum te, IndexReader r) |
| throws IOException { |
| @@ -32,8 +32,11 @@ |
| reader = r; |
| termEnum = te; |
| term = te.term(); |
| - postings = reader.termPositions(); |
| + } |
| |
| + // maps around deleted docs |
| + int[] getDocMap() { |
| + if (docMap == null) { |
| // build array which maps document numbers around deletions |
| if (reader.hasDeletions()) { |
| int maxDoc = reader.maxDoc(); |
| @@ -47,6 +50,15 @@ |
| } |
| } |
| } |
| + return docMap; |
| + } |
| + |
| + TermPositions getPositions() throws IOException { |
| + if (postings == null) { |
| + postings = reader.termPositions(); |
| + } |
| + return postings; |
| + } |
| |
| final boolean next() throws IOException { |
| if (termEnum.next()) { |
| @@ -60,7 +72,9 @@ |
| |
| final void close() throws IOException { |
| termEnum.close(); |
| + if (postings != null) { |
| postings.close(); |
| } |
| } |
| +} |
| |