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 2013/02/12 13:33:11 UTC
svn commit: r1445138 - in /lucene/dev/branches/LUCENE-2878/lucene/core/src:
java/org/apache/lucene/search/ test/org/apache/lucene/search/intervals/
Author: romseygeek
Date: Tue Feb 12 12:33:10 2013
New Revision: 1445138
URL: http://svn.apache.org/r1445138
Log:
ReqOptSumScorer implements next/start/endPosition()
Modified:
lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/BooleanScorer2.java
lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/ConjunctionScorer.java
lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/PositionQueue.java
lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/ReqOptSumScorer.java
lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/IntervalTestBase.java
lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBasicIntervals.java
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/BooleanScorer2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/BooleanScorer2.java?rev=1445138&r1=1445137&r2=1445138&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/BooleanScorer2.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/BooleanScorer2.java Tue Feb 12 12:33:10 2013
@@ -152,6 +152,31 @@ class BooleanScorer2 extends Scorer {
public IntervalIterator intervals(boolean collectIntervals) throws IOException {
return scorer.intervals(collectIntervals);
}
+
+ @Override
+ public int nextPosition() throws IOException {
+ return scorer.nextPosition();
+ }
+
+ @Override
+ public int startPosition() throws IOException {
+ return scorer.startPosition();
+ }
+
+ @Override
+ public int endPosition() throws IOException {
+ return scorer.endPosition();
+ }
+
+ @Override
+ public int startOffset() throws IOException {
+ return scorer.startOffset();
+ }
+
+ @Override
+ public int endOffset() throws IOException {
+ return scorer.endOffset();
+ }
}
private Scorer countingDisjunctionSumScorer(final List<Scorer> scorers,
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/ConjunctionScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/ConjunctionScorer.java?rev=1445138&r1=1445137&r2=1445138&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/ConjunctionScorer.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/ConjunctionScorer.java Tue Feb 12 12:33:10 2013
@@ -17,21 +17,22 @@ package org.apache.lucene.search;
* limitations under the License.
*/
+import org.apache.lucene.search.intervals.ConjunctionIntervalIterator;
+import org.apache.lucene.search.intervals.IntervalIterator;
+import org.apache.lucene.util.ArrayUtil;
+
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
-import org.apache.lucene.search.intervals.ConjunctionIntervalIterator;
-import org.apache.lucene.search.intervals.IntervalIterator;
-import org.apache.lucene.util.ArrayUtil;
-
/** Scorer for conjunctions, sets of queries, all of which are required. */
class ConjunctionScorer extends Scorer {
private final Scorer[] scorersOrdered;
private final Scorer[] scorers;
private int lastDoc = -1;
+ final PositionQueue posQueue;
public ConjunctionScorer(Weight weight, Collection<Scorer> scorers) throws IOException {
this(weight, scorers.toArray(new Scorer[scorers.size()]));
@@ -42,6 +43,7 @@ class ConjunctionScorer extends Scorer {
scorersOrdered = new Scorer[scorers.length];
System.arraycopy(scorers, 0, scorersOrdered, 0, scorers.length);
this.scorers = scorers;
+ posQueue = new PositionQueue(scorers);
for (int i = 0; i < scorers.length; i++) {
if (scorers[i].nextDoc() == NO_MORE_DOCS) {
@@ -105,6 +107,7 @@ class ConjunctionScorer extends Scorer {
doc = firstScorer.advance(doc);
first = first == scorers.length - 1 ? 0 : first + 1;
}
+ posQueue.advanceTo(doc);
return doc;
}
@@ -160,6 +163,31 @@ class ConjunctionScorer extends Scorer {
}
@Override
+ public int nextPosition() throws IOException {
+ return posQueue.nextPosition();
+ }
+
+ @Override
+ public int startPosition() throws IOException {
+ return posQueue.startPosition();
+ }
+
+ @Override
+ public int endPosition() throws IOException {
+ return posQueue.endPosition();
+ }
+
+ @Override
+ public int startOffset() throws IOException {
+ return posQueue.startOffset();
+ }
+
+ @Override
+ public int endOffset() throws IOException {
+ return posQueue.endOffset();
+ }
+
+ @Override
public Collection<ChildScorer> getChildren() {
ArrayList<ChildScorer> children = new ArrayList<ChildScorer>(scorers.length);
for (Scorer scorer : scorers) {
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/PositionQueue.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/PositionQueue.java?rev=1445138&r1=1445137&r2=1445138&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/PositionQueue.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/PositionQueue.java Tue Feb 12 12:33:10 2013
@@ -47,7 +47,7 @@ public class PositionQueue extends Prior
Interval current = new Interval();
int docId = -1;
- public PositionQueue(DocsEnum[] subDocsEnums) {
+ public PositionQueue(DocsEnum... subDocsEnums) {
super(subDocsEnums.length);
for (int i = 0; i < subDocsEnums.length; i++) {
add(new DocsEnumRef(subDocsEnums[i]));
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/ReqOptSumScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/ReqOptSumScorer.java?rev=1445138&r1=1445137&r2=1445138&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/ReqOptSumScorer.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/ReqOptSumScorer.java Tue Feb 12 12:33:10 2013
@@ -34,6 +34,7 @@ class ReqOptSumScorer extends Scorer {
*/
private Scorer reqScorer;
private Scorer optScorer;
+ private PositionQueue posQueue;
/** Construct a <code>ReqOptScorer</code>.
* @param reqScorer The required scorer. This must match.
@@ -48,16 +49,21 @@ class ReqOptSumScorer extends Scorer {
assert optScorer != null;
this.reqScorer = reqScorer;
this.optScorer = optScorer;
+ posQueue = new PositionQueue(reqScorer, optScorer);
}
@Override
public int nextDoc() throws IOException {
- return reqScorer.nextDoc();
+ int doc = reqScorer.nextDoc();
+ posQueue.advanceTo(doc);
+ return doc;
}
@Override
public int advance(int target) throws IOException {
- return reqScorer.advance(target);
+ int doc = reqScorer.advance(target);
+ posQueue.advanceTo(doc);
+ return doc;
}
@Override
@@ -101,6 +107,34 @@ class ReqOptSumScorer extends Scorer {
}
@Override
+ public int nextPosition() throws IOException {
+ int optDoc = optScorer.docID();
+ if (optDoc < reqScorer.docID())
+ optScorer.advance(reqScorer.docID());
+ return posQueue.nextPosition();
+ }
+
+ @Override
+ public int startPosition() throws IOException {
+ return posQueue.startPosition();
+ }
+
+ @Override
+ public int endPosition() throws IOException {
+ return posQueue.endPosition();
+ }
+
+ @Override
+ public int startOffset() throws IOException {
+ return posQueue.startOffset();
+ }
+
+ @Override
+ public int endOffset() throws IOException {
+ return posQueue.endOffset();
+ }
+
+ @Override
public Collection<ChildScorer> getChildren() {
ArrayList<ChildScorer> children = new ArrayList<ChildScorer>(2);
children.add(new ChildScorer(reqScorer, "MUST"));
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/IntervalTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/IntervalTestBase.java?rev=1445138&r1=1445137&r2=1445138&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/IntervalTestBase.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/IntervalTestBase.java Tue Feb 12 12:33:10 2013
@@ -106,7 +106,7 @@ public abstract class IntervalTestBase e
String expectation = "Expected match at docid " + docid + ", position " + expectedDocMatches[j];
Assert.assertTrue(expectation, matchIt.hasNext());
Interval match = matchIt.next();
- System.err.println(match);
+ System.err.println(docid + ":" + match);
Assert.assertEquals("Incorrect docid", matches[i].doc, docid);
Assert.assertEquals("Incorrect match start position", expectedDocMatches[j], match.begin);
Assert.assertEquals("Incorrect match end position", expectedDocMatches[j + 1], match.end);
@@ -168,6 +168,18 @@ public abstract class IntervalTestBase e
return q;
}
+ protected Query makeBooleanQuery(BooleanClause... clauses) {
+ BooleanQuery q = new BooleanQuery();
+ for (BooleanClause clause : clauses) {
+ q.add(clause);
+ }
+ return q;
+ }
+
+ protected BooleanClause makeBooleanClause(String text, BooleanClause.Occur occur) {
+ return new BooleanClause(makeTermQuery(text), occur);
+ }
+
public static class Match implements Comparable<TestDisjunctionIntervalIterator.Match> {
public final int docid;
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBasicIntervals.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBasicIntervals.java?rev=1445138&r1=1445137&r2=1445138&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBasicIntervals.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBasicIntervals.java Tue Feb 12 12:33:10 2013
@@ -20,6 +20,7 @@ package org.apache.lucene.search.interva
import org.apache.lucene.document.Document;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.RandomIndexWriter;
+import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.Query;
import java.io.IOException;
@@ -63,7 +64,6 @@ public class TestBasicIntervals extends
});
}
- /*
public void testNestedConjunctions() throws IOException {
Query q = makeAndQuery(makeTermQuery("v2"), makeOrQuery(makeTermQuery("v3"), makeTermQuery("v4")));
checkIntervals(q, searcher, new int[][]{
@@ -72,7 +72,17 @@ public class TestBasicIntervals extends
{ 14, 0, 0, 1, 1, 2, 2, 3, 3 }
});
}
- */
+
+ public void testSingleRequiredManyOptional() throws IOException {
+ Query q = makeBooleanQuery(makeBooleanClause("v2", BooleanClause.Occur.MUST),
+ makeBooleanClause("v3", BooleanClause.Occur.SHOULD),
+ makeBooleanClause("v4", BooleanClause.Occur.SHOULD));
+ checkIntervals(q, searcher, new int[][]{
+ { 12, 1, 1, 2, 2 },
+ { 13, 1, 1, 2, 2, 3, 3, 4, 4 },
+ { 14, 0, 0, 1, 1, 2, 2, 3, 3 }
+ });
+ }
public void testSimpleTerm() throws IOException {
Query q = makeTermQuery("u2");