You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2015/09/14 11:57:25 UTC
svn commit: r1702892 - in /lucene/dev/branches/branch_5x: ./ lucene/
lucene/core/ lucene/core/src/java/org/apache/lucene/search/payloads/
lucene/core/src/test/org/apache/lucene/search/payloads/ lucene/highlighter/
lucene/highlighter/src/test/org/apache...
Author: romseygeek
Date: Mon Sep 14 09:57:24 2015
New Revision: 1702892
URL: http://svn.apache.org/r1702892
Log:
LUCENE-6716: Change SpanPayloadCheckQuery to take List<BytesRef>
Added:
lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/payloads/TestPayloadCheckQuery.java
- copied unchanged from r1702872, lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/payloads/TestPayloadCheckQuery.java
Removed:
lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/payloads/TestPayloadBasics.java
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/lucene/ (props changed)
lucene/dev/branches/branch_5x/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/lucene/core/ (props changed)
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/payloads/SpanNearPayloadCheckQuery.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/payloads/SpanPayloadCheckQuery.java
lucene/dev/branches/branch_5x/lucene/highlighter/ (props changed)
lucene/dev/branches/branch_5x/lucene/highlighter/src/test/org/apache/lucene/search/highlight/HighlighterTest.java
lucene/dev/branches/branch_5x/solr/ (props changed)
lucene/dev/branches/branch_5x/solr/core/ (props changed)
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java
Modified: lucene/dev/branches/branch_5x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/CHANGES.txt?rev=1702892&r1=1702891&r2=1702892&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/lucene/CHANGES.txt Mon Sep 14 09:57:24 2015
@@ -32,6 +32,9 @@ API Changes
In order to apply boosts, you now need to wrap queries in a BoostQuery.
(Adrien Grand)
+* LUCENE-6716: SpanPayloadCheckQuery now takes a List<BytesRef> rather than
+ a Collection<byte[]>. (Alan Woodward)
+
Optimizations
* LUCENE-6708: TopFieldCollector does not compute the score several times on the
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/payloads/SpanNearPayloadCheckQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/payloads/SpanNearPayloadCheckQuery.java?rev=1702892&r1=1702891&r2=1702892&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/payloads/SpanNearPayloadCheckQuery.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/payloads/SpanNearPayloadCheckQuery.java Mon Sep 14 09:57:24 2015
@@ -16,9 +16,11 @@ package org.apache.lucene.search.payload
* limitations under the License.
*/
-import java.util.Collection;
+import java.util.List;
+import org.apache.lucene.index.Term;
import org.apache.lucene.search.spans.SpanNearQuery;
+import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.ToStringUtils;
@@ -33,9 +35,9 @@ public class SpanNearPayloadCheckQuery e
/**
* @param match The underlying {@link org.apache.lucene.search.spans.SpanQuery} to check
- * @param payloadToMatch The {@link java.util.Collection} of payloads to match
+ * @param payloadToMatch The {@link java.util.List} of payloads to match
*/
- public SpanNearPayloadCheckQuery(SpanNearQuery match, Collection<byte[]> payloadToMatch) {
+ public SpanNearPayloadCheckQuery(SpanNearQuery match, List<BytesRef> payloadToMatch) {
super(match, payloadToMatch);
}
@@ -45,8 +47,8 @@ public class SpanNearPayloadCheckQuery e
buffer.append("spanPayCheck(");
buffer.append(match.toString(field));
buffer.append(", payloadRef: ");
- for (byte[] bytes : payloadToMatch) {
- ToStringUtils.byteArray(buffer, bytes);
+ for (BytesRef bytes : payloadToMatch) {
+ buffer.append(Term.toString(bytes));
buffer.append(';');
}
buffer.append(")");
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/payloads/SpanPayloadCheckQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/payloads/SpanPayloadCheckQuery.java?rev=1702892&r1=1702891&r2=1702892&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/payloads/SpanPayloadCheckQuery.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/payloads/SpanPayloadCheckQuery.java Mon Sep 14 09:57:24 2015
@@ -17,13 +17,12 @@ package org.apache.lucene.search.payload
*/
import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Set;
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.index.Terms;
@@ -32,10 +31,12 @@ import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.search.spans.FilterSpans;
import org.apache.lucene.search.spans.FilterSpans.AcceptStatus;
+import org.apache.lucene.search.spans.SpanCollector;
import org.apache.lucene.search.spans.SpanQuery;
import org.apache.lucene.search.spans.SpanScorer;
import org.apache.lucene.search.spans.SpanWeight;
import org.apache.lucene.search.spans.Spans;
+import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.ToStringUtils;
/**
@@ -43,14 +44,14 @@ import org.apache.lucene.util.ToStringUt
*/
public class SpanPayloadCheckQuery extends SpanQuery {
- protected final Collection<byte[]> payloadToMatch;
+ protected final List<BytesRef> payloadToMatch;
protected final SpanQuery match;
/**
* @param match The underlying {@link org.apache.lucene.search.spans.SpanQuery} to check
- * @param payloadToMatch The {@link java.util.Collection} of payloads to match
+ * @param payloadToMatch The {@link java.util.List} of payloads to match
*/
- public SpanPayloadCheckQuery(SpanQuery match, Collection<byte[]> payloadToMatch) {
+ public SpanPayloadCheckQuery(SpanQuery match, List<BytesRef> payloadToMatch) {
this.match = match;
this.payloadToMatch = payloadToMatch;
}
@@ -90,14 +91,14 @@ public class SpanPayloadCheckQuery exten
@Override
public Spans getSpans(final LeafReaderContext context, Postings requiredPostings) throws IOException {
- final PayloadSpanCollector collector = new PayloadSpanCollector();
+ final PayloadChecker collector = new PayloadChecker();
Spans matchSpans = matchWeight.getSpans(context, requiredPostings.atLeast(Postings.PAYLOADS));
return (matchSpans == null) ? null : new FilterSpans(matchSpans) {
@Override
protected AcceptStatus accept(Spans candidate) throws IOException {
collector.reset();
candidate.collect(collector);
- return checkPayloads(collector.getPayloads());
+ return collector.match();
}
};
}
@@ -118,27 +119,42 @@ public class SpanPayloadCheckQuery exten
}
}
- /**
- * Check to see if the collected payloads match the required set.
- *
- * @param candidate a collection of payloads from the current Spans
- * @return whether or not the payloads match
- */
- protected AcceptStatus checkPayloads(Collection<byte[]> candidate) {
- if (candidate.size() == payloadToMatch.size()){
- //TODO: check the byte arrays are the same
- Iterator<byte[]> toMatchIter = payloadToMatch.iterator();
- //check each of the byte arrays, in order
- for (byte[] candBytes : candidate) {
- //if one is a mismatch, then return false
- if (Arrays.equals(candBytes, toMatchIter.next()) == false){
- return AcceptStatus.NO;
- }
+ private class PayloadChecker implements SpanCollector {
+
+ int upto = 0;
+ boolean matches = true;
+
+ @Override
+ public void collectLeaf(PostingsEnum postings, int position, Term term) throws IOException {
+ if (!matches)
+ return;
+ if (upto >= payloadToMatch.size()) {
+ matches = false;
+ return;
+ }
+ BytesRef payload = postings.getPayload();
+ if (payloadToMatch.get(upto) == null) {
+ matches = payload == null;
+ upto++;
+ return;
}
- //we've verified all the bytes
- return AcceptStatus.YES;
- } else {
- return AcceptStatus.NO;
+ if (payload == null) {
+ matches = false;
+ upto++;
+ return;
+ }
+ matches = payloadToMatch.get(upto).bytesEquals(payload);
+ upto++;
+ }
+
+ AcceptStatus match() {
+ return matches && upto == payloadToMatch.size() ? AcceptStatus.YES : AcceptStatus.NO;
+ }
+
+ @Override
+ public void reset() {
+ this.upto = 0;
+ this.matches = true;
}
}
@@ -148,8 +164,8 @@ public class SpanPayloadCheckQuery exten
buffer.append("spanPayCheck(");
buffer.append(match.toString(field));
buffer.append(", payloadRef: ");
- for (byte[] bytes : payloadToMatch) {
- ToStringUtils.byteArray(buffer, bytes);
+ for (BytesRef bytes : payloadToMatch) {
+ buffer.append(Term.toString(bytes));
buffer.append(';');
}
buffer.append(")");
Modified: lucene/dev/branches/branch_5x/lucene/highlighter/src/test/org/apache/lucene/search/highlight/HighlighterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/highlighter/src/test/org/apache/lucene/search/highlight/HighlighterTest.java?rev=1702892&r1=1702891&r2=1702892&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/highlighter/src/test/org/apache/lucene/search/highlight/HighlighterTest.java (original)
+++ lucene/dev/branches/branch_5x/lucene/highlighter/src/test/org/apache/lucene/search/highlight/HighlighterTest.java Mon Sep 14 09:57:24 2015
@@ -17,6 +17,8 @@ package org.apache.lucene.search.highlig
* limitations under the License.
*/
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@@ -29,9 +31,6 @@ import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.BaseTokenStreamTestCase;
import org.apache.lucene.analysis.CachingTokenFilter;
@@ -78,8 +77,8 @@ import org.apache.lucene.search.TermRang
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.search.highlight.SynonymTokenizer.TestHighlightRunner;
-import org.apache.lucene.search.join.QueryBitSetProducer;
import org.apache.lucene.search.join.BitSetProducer;
+import org.apache.lucene.search.join.QueryBitSetProducer;
import org.apache.lucene.search.join.ScoreMode;
import org.apache.lucene.search.join.ToChildBlockJoinQuery;
import org.apache.lucene.search.join.ToParentBlockJoinQuery;
@@ -1957,7 +1956,7 @@ public class HighlighterTest extends Bas
}
try (IndexReader reader = DirectoryReader.open(dir)) {
Query query = new SpanPayloadCheckQuery(new SpanTermQuery(new Term(FIELD_NAME, "words")),
- Collections.singleton("pos: 1".getBytes("UTF-8")));//just match the first "word" occurrence
+ Collections.singletonList(new BytesRef("pos: 1")));//just match the first "word" occurrence
IndexSearcher searcher = newSearcher(reader);
QueryScorer scorer = new QueryScorer(query, searcher.getIndexReader(), FIELD_NAME);
scorer.setUsePayloads(true);
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java?rev=1702892&r1=1702891&r2=1702892&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java Mon Sep 14 09:57:24 2015
@@ -30,6 +30,7 @@ import org.apache.lucene.index.Term;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.payloads.SpanPayloadCheckQuery;
import org.apache.lucene.search.spans.SpanTermQuery;
+import org.apache.lucene.util.BytesRef;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.params.HighlightParams;
import org.apache.solr.handler.component.HighlightComponent;
@@ -1108,7 +1109,7 @@ public class HighlighterTest extends Sol
//Create query matching this payload
Query query = new SpanPayloadCheckQuery(new SpanTermQuery(new Term(FIELD_NAME, "word")),
- Collections.singleton(new byte[]{0,0,0,7}));//bytes for integer 7
+ Collections.singletonList(new BytesRef(new byte[]{0, 0, 0, 7})));//bytes for integer 7
//invoke highlight component... the hard way
final SearchComponent hlComp = h.getCore().getSearchComponent("highlight");