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 2012/11/20 18:03:34 UTC
svn commit: r1411748 - in /lucene/dev/branches/LUCENE-2878/lucene/core/src:
java/org/apache/lucene/search/intervals/
test/org/apache/lucene/search/intervals/
Author: romseygeek
Date: Tue Nov 20 17:03:33 2012
New Revision: 1411748
URL: http://svn.apache.org/viewvc?rev=1411748&view=rev
Log:
LUCENE-2878: Add more tests for Brouwerian Query + fixes
Modified:
lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/BrouwerianIntervalIterator.java
lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/NonOverlappingQuery.java
lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/UnorderedNearQuery.java
lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBrouwerianQuery.java
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/BrouwerianIntervalIterator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/BrouwerianIntervalIterator.java?rev=1411748&r1=1411747&r2=1411748&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/BrouwerianIntervalIterator.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/BrouwerianIntervalIterator.java Tue Nov 20 17:03:33 2012
@@ -56,7 +56,8 @@ public class BrouwerianIntervalIterator
@Override
public int scorerAdvanced(int docId) throws IOException {
minuend.scorerAdvanced(docId);
- subtracted.scorerAdvanced(docId);
+ if (subtracted.docID() <= docId)
+ subtracted.scorerAdvanced(docId);
subtractedInterval = Interval.INFINITE_INTERVAL;
return docId;
}
@@ -94,5 +95,10 @@ public class BrouwerianIntervalIterator
public int matchDistance() {
return minuend.matchDistance();
}
+
+ @Override
+ public int docID() {
+ return minuend.docID();
+ }
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/NonOverlappingQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/NonOverlappingQuery.java?rev=1411748&r1=1411747&r2=1411748&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/NonOverlappingQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/NonOverlappingQuery.java Tue Nov 20 17:03:33 2012
@@ -134,7 +134,7 @@ public final class NonOverlappingQuery e
if (subScorer == null) {
return scorer;
}
- return scorer == null ? null : new PositionFilterScorer(this, scorer, subScorer, factory);
+ return scorer == null ? null : new BrouwerianScorer(this, scorer, subScorer, factory);
}
@Override
@@ -181,25 +181,25 @@ public final class NonOverlappingQuery e
}
- final class PositionFilterScorer extends Scorer {
+ final class BrouwerianScorer extends Scorer {
- private final Scorer other;
+ private final Scorer minuend;
private IntervalIterator filter;
private final Scorer subtracted;
Interval current;
private final ScorerFactory factory;
- public PositionFilterScorer(Weight weight, Scorer other, Scorer subtracted, ScorerFactory factory) throws IOException {
+ public BrouwerianScorer(Weight weight, Scorer minuend, Scorer subtracted, ScorerFactory factory) throws IOException {
super(weight);
- this.other = other;
+ this.minuend = minuend;
this.subtracted = subtracted;
- this.filter = new BrouwerianIntervalIterator(other, false, other.intervals(false), subtracted.intervals(false));
+ this.filter = new BrouwerianIntervalIterator(minuend, false, minuend.intervals(false), subtracted.intervals(false));
this.factory = factory;
}
@Override
public float score() throws IOException {
- return other.score();
+ return minuend.score();
}
@Override
@@ -212,10 +212,11 @@ public final class NonOverlappingQuery e
@Override
public int scorerAdvanced(int docId) throws IOException {
- docId = minuted.advance(docId);
+ int mId = minuted.advance(docId);
subtracted.advance(docId);
- brouwerianIntervalIterator.scorerAdvanced(docId);
- return docId;
+ if (mId <= docId)
+ return brouwerianIntervalIterator.scorerAdvanced(docId);
+ return mId;
}
@Override
@@ -284,17 +285,17 @@ public final class NonOverlappingQuery e
@Override
public int docID() {
- return other.docID();
+ return minuend.docID();
}
@Override
public int nextDoc() throws IOException {
int docId = -1;
- while ((docId = other.nextDoc()) != Scorer.NO_MORE_DOCS) {
+ while ((docId = minuend.nextDoc()) != Scorer.NO_MORE_DOCS) {
subtracted.advance(docId);
filter.scorerAdvanced(docId);
if ((current = filter.next()) != null) { // just check if there is a position that matches!
- return other.docID();
+ return minuend.docID();
}
}
return Scorer.NO_MORE_DOCS;
@@ -302,7 +303,7 @@ public final class NonOverlappingQuery e
@Override
public int advance(int target) throws IOException {
- int docId = other.advance(target);
+ int docId = minuend.advance(target);
subtracted.advance(docId);
if (docId == Scorer.NO_MORE_DOCS) {
return NO_MORE_DOCS;
@@ -310,15 +311,15 @@ public final class NonOverlappingQuery e
do {
filter.scorerAdvanced(docId);
if ((current = filter.next()) != null) {
- return other.docID();
+ return minuend.docID();
}
- } while ((docId = other.nextDoc()) != Scorer.NO_MORE_DOCS);
+ } while ((docId = minuend.nextDoc()) != Scorer.NO_MORE_DOCS);
return NO_MORE_DOCS;
}
@Override
public float freq() throws IOException {
- return other.freq();
+ return minuend.freq();
}
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/UnorderedNearQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/UnorderedNearQuery.java?rev=1411748&r1=1411747&r2=1411748&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/UnorderedNearQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/UnorderedNearQuery.java Tue Nov 20 17:03:33 2012
@@ -36,6 +36,8 @@ import org.apache.lucene.search.Query;
public class UnorderedNearQuery extends IntervalFilterQuery {
+ private final int slop;
+
/**
* Constructs an OrderedNearQuery
* @param slop the maximum distance between the subquery matches
@@ -44,6 +46,7 @@ public class UnorderedNearQuery extends
*/
public UnorderedNearQuery(int slop, boolean collectLeaves, Query... subqueries) {
super(buildBooleanQuery(subqueries), new WithinIntervalFilter(slop + subqueries.length - 2, collectLeaves));
+ this.slop = slop;
}
/**
@@ -63,5 +66,10 @@ public class UnorderedNearQuery extends
return bq;
}
+ @Override
+ public String toString() {
+ return "UnorderedNear/" + slop + ":" + super.toString("");
+ }
+
}
Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBrouwerianQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBrouwerianQuery.java?rev=1411748&r1=1411747&r2=1411748&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBrouwerianQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBrouwerianQuery.java Tue Nov 20 17:03:33 2012
@@ -81,4 +81,23 @@ public class TestBrouwerianQuery extends
});
}
+ public void testBrouwerianNonExistentOverlapQuery() throws IOException {
+ Query sub = new UnorderedNearQuery(2, false, makeTermQuery("dog"), makeTermQuery("over"));
+ Query query = makeTermQuery("dog");
+ NonOverlappingQuery q = new NonOverlappingQuery(query, sub);
+
+ checkIntervals(q, searcher, new int[][]{});
+ }
+
+ public void testBrouwerianExistentOverlapQuery() throws IOException {
+ Query sub = new UnorderedNearQuery(1, false, makeTermQuery("dog"), makeTermQuery("over"));
+ Query query = makeTermQuery("dog");
+ NonOverlappingQuery q = new NonOverlappingQuery(query, sub);
+
+ checkIntervals(q, searcher, new int[][]{
+ { 0, 8, 8 },
+ { 1, 8, 8 }
+ });
+ }
+
}