| diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMerging.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMerging.java |
| index 6931efaed8..45d24fb781 100644 |
| --- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMerging.java |
| +++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMerging.java |
| @@ -24,6 +24,8 @@ import org.apache.lucene.analysis.MockAnalyzer; |
| import org.apache.lucene.document.Document; |
| import org.apache.lucene.document.Field; |
| import org.apache.lucene.document.FieldType; |
| +import org.apache.lucene.document.NumericDocValuesField; |
| +import org.apache.lucene.document.StringField; |
| import org.apache.lucene.document.TextField; |
| import org.apache.lucene.index.IndexWriterConfig.OpenMode; |
| import org.apache.lucene.store.AlreadyClosedException; |
| @@ -457,4 +459,28 @@ public class TestIndexWriterMerging extends LuceneTestCase { |
| |
| directory.close(); |
| } |
| + |
| + public void testForceMergeDeletesWithSoftUpdates() throws Exception { |
| + Directory dir = newDirectory(); |
| + IndexWriterConfig indexWriterConfig = newIndexWriterConfig() |
| + .setSoftDeletesField("soft_delete") |
| + .setMergePolicy(new LogByteSizeMergePolicy()); |
| + IndexWriter writer = new IndexWriter(dir, indexWriterConfig); |
| + for (int i = 0; i < 2; i++) { |
| + Document doc = new Document(); |
| + doc.add(new StringField("id", Integer.toString(i), Field.Store.YES)); |
| + writer.addDocument(doc); |
| + } |
| + writer.flush(); |
| + // the second segment includes only the tombstone |
| + Document tombstone = new Document(); |
| + tombstone.add(new NumericDocValuesField("soft_delete", 1)); |
| + writer.softUpdateDocument(new Term("id", "1"), tombstone, new NumericDocValuesField("soft_delete", 1)); |
| + // LogByteSizeMergePolicy should merge these two segments as both have soft-deleted docs. |
| + writer.forceMergeDeletes(true); |
| + assertEquals(1, writer.segmentInfos.asList().size()); |
| + assertEquals(1, writer.maxDoc()); |
| + writer.close(); |
| + dir.close(); |
| + } |
| } |