From commits-return-103171-archive-asf-public=cust-asf.ponee.io@lucene.apache.org Mon Sep 3 17:22:36 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id 019E6180647 for ; Mon, 3 Sep 2018 17:22:35 +0200 (CEST) Received: (qmail 97401 invoked by uid 500); 3 Sep 2018 15:22:35 -0000 Mailing-List: contact commits-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@lucene.apache.org Delivered-To: mailing list commits@lucene.apache.org Received: (qmail 97392 invoked by uid 99); 3 Sep 2018 15:22:35 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Sep 2018 15:22:35 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id F0FFBE048B; Mon, 3 Sep 2018 15:22:34 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: dnhatn@apache.org To: commits@lucene.apache.org Message-Id: <8b0596e0448e47ea90a2776616f71314@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: lucene-solr:master: LUCENE-8472: Always rewrite soft-deletes retention query Date: Mon, 3 Sep 2018 15:22:34 +0000 (UTC) Repository: lucene-solr Updated Branches: refs/heads/master a1ec716e1 -> b8dfb7e91 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/b8dfb7e9 Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/b8dfb7e9 Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/b8dfb7e9 Branch: refs/heads/master Commit: b8dfb7e911e68dd89741675c70e0f7b6745b4502 Parents: a1ec716 Author: Nhat Nguyen Authored: Mon Sep 3 11:13:42 2018 -0400 Committer: Nhat Nguyen Committed: Mon Sep 3 11:19:40 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/b8dfb7e9/lucene/CHANGES.txt ---------------------------------------------------------------------- diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 5120f28..a2d88cd 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -312,6 +312,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/b8dfb7e9/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 a309b7a..9097a03 100644 --- a/lucene/core/src/java/org/apache/lucene/index/SoftDeletesRetentionMergePolicy.java +++ b/lucene/core/src/java/org/apache/lucene/index/SoftDeletesRetentionMergePolicy.java @@ -124,7 +124,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, ScoreMode.COMPLETE_NO_SCORES, 1.0f); + Weight weight = s.createWeight(s.rewrite(query), ScoreMode.COMPLETE_NO_SCORES, 1.0f); return weight.scorer(reader.getContext()); } http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b8dfb7e9/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 bc50fe5..fed2d19 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