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) @@ -313,7 +313,7 @@ SegmentMergeInfo smi = smis[i]; TermPositions postings = smi.postings; 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) @@ -24,7 +24,7 @@ TermEnum termEnum; IndexReader reader; TermPositions postings; - int[] docMap = null; // maps around deleted docs + int[] docMap; // initialized/returned from getDocMap() SegmentMergeInfo(int b, TermEnum te, IndexReader r) throws IOException { @@ -33,7 +33,11 @@ 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 +51,8 @@ } } } + return docMap; + } final boolean next() throws IOException { if (termEnum.next()) {