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