blob: d76cd88c115e419c4a1e09aa3ee60ba8393a5720 [file] [log] [blame]
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();
+ }
}