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 19:45:53 UTC
[3/6] lucene-solr:master: 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/f4bdb44f
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/f4bdb44f
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/f4bdb44f
Branch: refs/heads/master
Commit: f4bdb44fd8c6d13845355cefffccb963941bfa8f
Parents: 72e616d
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 15:08:51 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/f4bdb44f/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 0cddd00..43d33fd 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/f4bdb44f/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 fa38776..50a6211 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;