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:52 UTC

[2/6] lucene-solr:master: LUCENE-7481: Fix SpanPayloadCheckQuery rewrite

LUCENE-7481: Fix SpanPayloadCheckQuery 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/72e616dd
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/72e616dd
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/72e616dd

Branch: refs/heads/master
Commit: 72e616dd52b2b3979ef4e824966ac4ce0de592ba
Parents: 28aeead
Author: Erik Hatcher <eh...@apache.org>
Authored: Thu Apr 27 08:55:05 2017 -0400
Committer: Erik Hatcher <eh...@apache.org>
Committed: Thu Apr 27 08:55:05 2017 -0400

----------------------------------------------------------------------
 .../queries/payloads/SpanPayloadCheckQuery.java |  4 ++++
 .../queries/payloads/TestPayloadCheckQuery.java | 23 +++++++++++++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/72e616dd/lucene/queries/src/java/org/apache/lucene/queries/payloads/SpanPayloadCheckQuery.java
----------------------------------------------------------------------
diff --git a/lucene/queries/src/java/org/apache/lucene/queries/payloads/SpanPayloadCheckQuery.java b/lucene/queries/src/java/org/apache/lucene/queries/payloads/SpanPayloadCheckQuery.java
index e33eb18..ca0e062 100644
--- a/lucene/queries/src/java/org/apache/lucene/queries/payloads/SpanPayloadCheckQuery.java
+++ b/lucene/queries/src/java/org/apache/lucene/queries/payloads/SpanPayloadCheckQuery.java
@@ -69,6 +69,10 @@ public class SpanPayloadCheckQuery extends SpanQuery {
 
   @Override
   public Query rewrite(IndexReader reader) throws IOException {
+    Query matchRewritten = match.rewrite(reader);
+    if (match != matchRewritten && matchRewritten instanceof SpanQuery) {
+      return new SpanPayloadCheckQuery((SpanQuery)matchRewritten, payloadToMatch);
+    }
     return super.rewrite(reader);
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/72e616dd/lucene/queries/src/test/org/apache/lucene/queries/payloads/TestPayloadCheckQuery.java
----------------------------------------------------------------------
diff --git a/lucene/queries/src/test/org/apache/lucene/queries/payloads/TestPayloadCheckQuery.java b/lucene/queries/src/test/org/apache/lucene/queries/payloads/TestPayloadCheckQuery.java
index ffe2cb8..9e34784 100644
--- a/lucene/queries/src/test/org/apache/lucene/queries/payloads/TestPayloadCheckQuery.java
+++ b/lucene/queries/src/test/org/apache/lucene/queries/payloads/TestPayloadCheckQuery.java
@@ -34,6 +34,8 @@ import org.apache.lucene.index.Term;
 import org.apache.lucene.search.CheckHits;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.WildcardQuery;
+import org.apache.lucene.search.spans.SpanMultiTermQueryWrapper;
 import org.apache.lucene.search.spans.SpanNearQuery;
 import org.apache.lucene.search.spans.SpanPositionRangeQuery;
 import org.apache.lucene.search.spans.SpanQuery;
@@ -186,7 +188,6 @@ public class TestPayloadCheckQuery extends LuceneTestCase {
     payloads.add(pay4);
     query = new SpanPayloadCheckQuery(oneThousHunThree, payloads);
     checkHits(query, new int[]{1103, 1203,1303,1403,1503,1603,1703,1803,1903});
-
   }
 
   public void testEquality() {
@@ -208,4 +209,24 @@ public class TestPayloadCheckQuery extends LuceneTestCase {
     assertFalse(query2.equals(query4));
     assertFalse(query3.equals(query4));
   }
+
+  public void testRewrite() throws IOException {
+    SpanMultiTermQueryWrapper fiv = new SpanMultiTermQueryWrapper(new WildcardQuery(new Term("field", "fiv*")));
+    SpanMultiTermQueryWrapper hund = new SpanMultiTermQueryWrapper(new WildcardQuery(new Term("field", "hund*")));
+    SpanMultiTermQueryWrapper twent = new SpanMultiTermQueryWrapper(new WildcardQuery(new Term("field", "twent*")));
+    SpanMultiTermQueryWrapper nin = new SpanMultiTermQueryWrapper(new WildcardQuery(new Term("field", "nin*")));
+
+    SpanNearQuery sq = new SpanNearQuery(new SpanQuery[] {fiv, hund, twent, nin}, 0, true);
+
+    List<BytesRef> payloads = new ArrayList<>();
+    payloads.add(new BytesRef("pos: 0"));
+    payloads.add(new BytesRef("pos: 1"));
+    payloads.add(new BytesRef("pos: 2"));
+    payloads.add(new BytesRef("pos: 3"));
+
+    SpanPayloadCheckQuery query = new SpanPayloadCheckQuery(sq, payloads);
+
+    // if query wasn't rewritten properly, the query would have failed with "Rewrite first!"
+    checkHits(query, new int[]{529});
+  }
 }
\ No newline at end of file