Index: src/test/org/apache/lucene/index/TestIndexWriterDelete.java =================================================================== --- src/test/org/apache/lucene/index/TestIndexWriterDelete.java (revision 509741) +++ src/test/org/apache/lucene/index/TestIndexWriterDelete.java (working copy) @@ -69,6 +69,7 @@ for (int i = 0; i < 7; i++) { addDoc(modifier, ++id, value); + addDoc(modifier, ++id, value+1); } modifier.flush(); @@ -76,11 +77,11 @@ assertTrue(0 < modifier.getSegmentCount()); IndexReader reader = IndexReader.open(dir); - assertEquals(7, reader.numDocs()); + assertEquals(14, reader.numDocs()); reader.close(); - modifier.deleteDocuments(new Term("value", String.valueOf(value))); - modifier.deleteDocuments(new Term("value", String.valueOf(value))); + modifier.deleteDocuments(new Term("value", String.valueOf(value))); // delete half + modifier.deleteDocuments(new Term("value", String.valueOf(value+1))); // delete other half (should cause a flush) reader = IndexReader.open(dir); assertEquals(0, reader.numDocs()); Index: src/java/org/apache/lucene/index/IndexWriter.java =================================================================== --- src/java/org/apache/lucene/index/IndexWriter.java (revision 509924) +++ src/java/org/apache/lucene/index/IndexWriter.java (working copy) @@ -1726,10 +1726,11 @@ Num num = (Num) bufferedDeleteTerms.get(term); if (num == null) { bufferedDeleteTerms.put(term, new Num(ramSegmentInfos.size())); - } else { + numBufferedDeleteTerms++; + } else if (num.getNum() < ramSegmentInfos.size()){ num.setNum(ramSegmentInfos.size()); + numBufferedDeleteTerms++; } - numBufferedDeleteTerms++; } // Apply buffered delete terms to the segment just flushed from ram