You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2011/07/22 12:34:23 UTC
svn commit: r1149551 - in
/lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search:
BooleanQuery.java BooleanScorer.java
Author: simonw
Date: Fri Jul 22 10:34:22 2011
New Revision: 1149551
URL: http://svn.apache.org/viewvc?rev=1149551&view=rev
Log:
add position support to BooleanScorer
Modified:
lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/BooleanQuery.java
lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/BooleanScorer.java
Modified: lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/BooleanQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/BooleanQuery.java?rev=1149551&r1=1149550&r2=1149551&view=diff
==============================================================================
--- lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/BooleanQuery.java (original)
+++ lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/BooleanQuery.java Fri Jul 22 10:34:22 2011
@@ -311,7 +311,7 @@ public class BooleanQuery extends Query
}
// Check if we can return a BooleanScorer
- if (!scorerContext.needsPositions && !scorerContext.scoreDocsInOrder && scorerContext.topScorer && required.size() == 0 && prohibited.size() < 32) {
+ if (!scorerContext.scoreDocsInOrder && scorerContext.topScorer && required.size() == 0 && prohibited.size() < 32) {
return new BooleanScorer(this, disableCoord, minNrShouldMatch, optional, prohibited, maxCoord);
}
Modified: lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/BooleanScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/BooleanScorer.java?rev=1149551&r1=1149550&r2=1149551&view=diff
==============================================================================
--- lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/BooleanScorer.java (original)
+++ lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/BooleanScorer.java Fri Jul 22 10:34:22 2011
@@ -18,11 +18,14 @@ package org.apache.lucene.search;
*/
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery.BooleanWeight;
+import org.apache.lucene.search.positions.ConjunctionPositionIterator;
+import org.apache.lucene.search.positions.DisjunctionPositionIterator;
import org.apache.lucene.search.positions.PositionIntervalIterator;
/* Description from Doug Cutting (excerpted from
@@ -378,7 +381,19 @@ final class BooleanScorer extends Scorer
@Override
public PositionIntervalIterator positions() throws IOException {
- return super.positions();
+ final List<Scorer> scorers = new ArrayList<Scorer>();
+ SubScorer sub = this.scorers;
+ while(sub != null) {
+ if (!sub.prohibited) {
+ scorers.add(sub.scorer);
+ }
+ sub = sub.next;
+ }
+ if (this.minNrShouldMatch > 1) {
+ return new ConjunctionPositionIterator(this,
+ scorers.toArray(new Scorer[0]), this.minNrShouldMatch);
+ }
+ return new DisjunctionPositionIterator(this, scorers.toArray(new Scorer[0]));
}
}