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]));
   }
 
 }