You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dn...@apache.org on 2018/09/03 15:27:43 UTC

lucene-solr:branch_7x: LUCENE-8472: Always rewrite soft-deletes retention query

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_7x d35b615c6 -> 39b1d5968


LUCENE-8472: Always rewrite soft-deletes retention query

This change ensures that we always rewrite the soft-deletes merge
retention policy before passing it into `createWeight` as some Query
does not support `createWeight` directly.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/39b1d596
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/39b1d596
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/39b1d596

Branch: refs/heads/branch_7x
Commit: 39b1d5968029d010a39fd3d43a307745e3a2f3a3
Parents: d35b615
Author: Nhat Nguyen <nh...@elastic.co>
Authored: Mon Sep 3 11:13:42 2018 -0400
Committer: Nhat Nguyen <nh...@elastic.co>
Committed: Mon Sep 3 11:23:55 2018 -0400

----------------------------------------------------------------------
 lucene/CHANGES.txt                              |  2 ++
 .../index/SoftDeletesRetentionMergePolicy.java  |  2 +-
 .../TestSoftDeletesRetentionMergePolicy.java    | 27 ++++++++++++++++++++
 3 files changed, 30 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/39b1d596/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index ee4296a..8669b26 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -172,6 +172,8 @@ Bug Fixes:
  * LUCENE-8384: Fix missing advance docValues generation while handling docValues
    update in PendingSoftDeletes. (Simon Willnauer, Nhat Nguyen)
 
+ * LUCENE-8472: Always rewrite the soft-deletes merge retention query. (Adrien Grand, Nhat Nguyen)
+
 ======================= Lucene 7.4.0 =======================
 
 Upgrading

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/39b1d596/lucene/core/src/java/org/apache/lucene/index/SoftDeletesRetentionMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/SoftDeletesRetentionMergePolicy.java b/lucene/core/src/java/org/apache/lucene/index/SoftDeletesRetentionMergePolicy.java
index 464961c..99ad999 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SoftDeletesRetentionMergePolicy.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SoftDeletesRetentionMergePolicy.java
@@ -123,7 +123,7 @@ public final class SoftDeletesRetentionMergePolicy extends OneMergeWrappingMerge
   private static Scorer getScorer(Query query, CodecReader reader) throws IOException {
     IndexSearcher s = new IndexSearcher(reader);
     s.setQueryCache(null);
-    Weight weight = s.createWeight(query, false, 1.0f);
+    Weight weight = s.createWeight(s.rewrite(query), false, 1.0f);
     return weight.scorer(reader.getContext());
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/39b1d596/lucene/core/src/test/org/apache/lucene/index/TestSoftDeletesRetentionMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestSoftDeletesRetentionMergePolicy.java b/lucene/core/src/test/org/apache/lucene/index/TestSoftDeletesRetentionMergePolicy.java
index dc1c116..40f51c0 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestSoftDeletesRetentionMergePolicy.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestSoftDeletesRetentionMergePolicy.java
@@ -40,6 +40,7 @@ import org.apache.lucene.search.DocValuesFieldExistsQuery;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.MatchNoDocsQuery;
+import org.apache.lucene.search.PrefixQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.SearcherFactory;
 import org.apache.lucene.search.SearcherManager;
@@ -678,6 +679,32 @@ public class TestSoftDeletesRetentionMergePolicy extends LuceneTestCase {
     IOUtils.close(writer, dir);
   }
 
+  public void testRewriteRetentionQuery() throws Exception {
+    Directory dir = newDirectory();
+    IndexWriterConfig config = newIndexWriterConfig().setSoftDeletesField("soft_deletes")
+        .setMergePolicy(new SoftDeletesRetentionMergePolicy("soft_deletes",
+            () -> new PrefixQuery(new Term("id", "foo")), newMergePolicy()));
+    IndexWriter writer = new IndexWriter(dir, config);
+
+    Document d = new Document();
+    d.add(new StringField("id", "foo-1", Field.Store.YES));
+    writer.addDocument(d);
+    d = new Document();
+    d.add(new StringField("id", "foo-2", Field.Store.YES));
+    writer.softUpdateDocument(new Term("id", "foo-1"), d, new NumericDocValuesField("soft_deletes", 1));
+
+    d = new Document();
+    d.add(new StringField("id", "bar-1", Field.Store.YES));
+    writer.addDocument(d);
+    d.add(new StringField("id", "bar-2", Field.Store.YES));
+    writer.softUpdateDocument(new Term("id", "bar-1"), d, new NumericDocValuesField("soft_deletes", 1));
+
+    writer.forceMerge(1);
+    assertEquals(2, writer.numDocs()); // foo-2, bar-2
+    assertEquals(3, writer.maxDoc());  // foo-1, foo-2, bar-2
+    IOUtils.close(writer, dir);
+  }
+
   static void doUpdate(Term doc, IndexWriter writer, Field... fields) throws IOException {
     long seqId = -1;
     do { // retry if we just committing a merge