You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by eh...@apache.org on 2017/04/27 23:51:54 UTC

[3/5] lucene-solr:branch_6x: LUCENE-7481: Fix PayloadScoreQuery rewrite

LUCENE-7481: Fix PayloadScoreQuery rewrite


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

Branch: refs/heads/branch_6x
Commit: 85f97bd8ce6a8e110f745715f6b0ede049f04832
Parents: d38fe75
Author: Erik Hatcher <eh...@apache.org>
Authored: Thu Apr 27 15:08:51 2017 -0400
Committer: Erik Hatcher <eh...@apache.org>
Committed: Thu Apr 27 19:34:58 2017 -0400

----------------------------------------------------------------------
 .../lucene/queries/payloads/PayloadScoreQuery.java     | 12 ++++++++++++
 .../lucene/queries/payloads/TestPayloadScoreQuery.java | 13 +++++++++++++
 2 files changed, 25 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/85f97bd8/lucene/queries/src/java/org/apache/lucene/queries/payloads/PayloadScoreQuery.java
----------------------------------------------------------------------
diff --git a/lucene/queries/src/java/org/apache/lucene/queries/payloads/PayloadScoreQuery.java b/lucene/queries/src/java/org/apache/lucene/queries/payloads/PayloadScoreQuery.java
index 71ce3f9..9173d92 100644
--- a/lucene/queries/src/java/org/apache/lucene/queries/payloads/PayloadScoreQuery.java
+++ b/lucene/queries/src/java/org/apache/lucene/queries/payloads/PayloadScoreQuery.java
@@ -21,12 +21,14 @@ import java.util.Map;
 import java.util.Set;
 import java.util.Objects;
 
+import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.PostingsEnum;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.TermContext;
 import org.apache.lucene.search.Explanation;
 import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
 import org.apache.lucene.search.similarities.ClassicSimilarity;
 import org.apache.lucene.search.similarities.Similarity;
 import org.apache.lucene.search.similarities.Similarity.SimScorer;
@@ -81,6 +83,16 @@ public class PayloadScoreQuery extends SpanQuery {
   }
 
   @Override
+  public Query rewrite(IndexReader reader) throws IOException {
+    Query matchRewritten = wrappedQuery.rewrite(reader);
+    if (wrappedQuery != matchRewritten && matchRewritten instanceof SpanQuery) {
+      return new PayloadScoreQuery((SpanQuery)matchRewritten, function, includeSpanScore);
+    }
+    return super.rewrite(reader);
+  }
+
+
+  @Override
   public String toString(String field) {
     return "PayloadScoreQuery[" + wrappedQuery.toString(field) + "; " + function.getClass().getSimpleName() + "; " + includeSpanScore + "]";
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/85f97bd8/lucene/queries/src/test/org/apache/lucene/queries/payloads/TestPayloadScoreQuery.java
----------------------------------------------------------------------
diff --git a/lucene/queries/src/test/org/apache/lucene/queries/payloads/TestPayloadScoreQuery.java b/lucene/queries/src/test/org/apache/lucene/queries/payloads/TestPayloadScoreQuery.java
index 64decaf..f8af07d 100644
--- a/lucene/queries/src/test/org/apache/lucene/queries/payloads/TestPayloadScoreQuery.java
+++ b/lucene/queries/src/test/org/apache/lucene/queries/payloads/TestPayloadScoreQuery.java
@@ -17,6 +17,8 @@
 package org.apache.lucene.queries.payloads;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.MockTokenizer;
@@ -37,8 +39,10 @@ import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.QueryUtils;
 import org.apache.lucene.search.TermStatistics;
 import org.apache.lucene.search.TopDocs;
+import org.apache.lucene.search.WildcardQuery;
 import org.apache.lucene.search.similarities.ClassicSimilarity;
 import org.apache.lucene.search.spans.SpanContainingQuery;
+import org.apache.lucene.search.spans.SpanMultiTermQueryWrapper;
 import org.apache.lucene.search.spans.SpanNearQuery;
 import org.apache.lucene.search.spans.SpanOrQuery;
 import org.apache.lucene.search.spans.SpanQuery;
@@ -193,6 +197,15 @@ public class TestPayloadScoreQuery extends LuceneTestCase {
     assertFalse(query3.equals(query4));
   }
 
+  public void testRewrite() throws IOException {
+    SpanMultiTermQueryWrapper xyz = new SpanMultiTermQueryWrapper(new WildcardQuery(new Term("field", "xyz*")));
+    PayloadScoreQuery psq = new PayloadScoreQuery(xyz, new AveragePayloadFunction(), false);
+
+    // if query wasn't rewritten properly, the query would have failed with "Rewrite first!"
+    searcher.search(psq, 1);
+  }
+
+
   private static IndexSearcher searcher;
   private static IndexReader reader;
   private static Directory directory;