You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2015/07/16 10:49:56 UTC

svn commit: r1691335 - in /lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial: composite/IntersectsRPTVerifyQuery.java prefix/AbstractPrefixTreeFilter.java util/BitDocIdSetBuilder.java

Author: jpountz
Date: Thu Jul 16 08:49:55 2015
New Revision: 1691335

URL: http://svn.apache.org/r1691335
Log:
LUCENE-6645: Remove BitDocIdSetBuilder from lucene-spatial as well.

Removed:
    lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial/util/BitDocIdSetBuilder.java
Modified:
    lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial/composite/IntersectsRPTVerifyQuery.java
    lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial/prefix/AbstractPrefixTreeFilter.java

Modified: lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial/composite/IntersectsRPTVerifyQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial/composite/IntersectsRPTVerifyQuery.java?rev=1691335&r1=1691334&r2=1691335&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial/composite/IntersectsRPTVerifyQuery.java (original)
+++ lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial/composite/IntersectsRPTVerifyQuery.java Thu Jul 16 08:49:55 2015
@@ -38,9 +38,8 @@ import org.apache.lucene.search.Weight;
 import org.apache.lucene.spatial.prefix.AbstractVisitingPrefixTreeFilter;
 import org.apache.lucene.spatial.prefix.tree.Cell;
 import org.apache.lucene.spatial.prefix.tree.SpatialPrefixTree;
-import org.apache.lucene.spatial.util.BitDocIdSetBuilder;
-import org.apache.lucene.util.BitDocIdSet;
 import org.apache.lucene.util.Bits;
+import org.apache.lucene.util.DocIdSetBuilder;
 
 /**
  * A spatial Intersects predicate that distinguishes an approximated match from an exact match based on which cells
@@ -103,16 +102,16 @@ public class IntersectsRPTVerifyQuery ex
         if (approxDISI == null) {
           return null;
         }
-        final Bits exactDocBits;
+        final DocIdSetIterator exactIterator;
         if (result.exactDocIdSet != null) {
           // If both sets are the same, there's nothing to verify; we needn't return a TwoPhaseIterator
-          if (result.approxDocIdSet.equals(result.exactDocIdSet)) {
+          if (result.approxDocIdSet == result.exactDocIdSet) {
             return new ConstantScoreScorer(this, score(), approxDISI);
           }
-          exactDocBits = result.exactDocIdSet.bits();
-          assert exactDocBits != null;
+          exactIterator = result.exactDocIdSet.iterator();
+          assert exactIterator != null;
         } else {
-          exactDocBits = null;
+          exactIterator = null;
         }
 
         final FunctionValues predFuncValues = predicateValueSource.getValues(valueSourceContext, context);
@@ -120,11 +119,17 @@ public class IntersectsRPTVerifyQuery ex
         final TwoPhaseIterator twoPhaseIterator = new TwoPhaseIterator(approxDISI) {
           @Override
           public boolean matches() throws IOException {
-            if (exactDocBits != null && exactDocBits.get(approxDISI.docID())) {
-              return true;
+            final int doc = approxDISI.docID();
+            if (exactIterator != null) {
+              if (exactIterator.docID() < doc) {
+                exactIterator.advance(doc);
+              }
+              if (exactIterator.docID() == doc) {
+                return true;
+              }
             }
 
-            return predFuncValues.boolVal(approxDISI.docID());
+            return predFuncValues.boolVal(doc);
           }
         };
 
@@ -153,10 +158,12 @@ public class IntersectsRPTVerifyQuery ex
     // TODO consider if IntersectsPrefixTreeFilter should simply do this and provide both sets
 
     class IntersectsDifferentiatingVisitor extends VisitorTemplate {
-      BitDocIdSetBuilder approxBuilder = new BitDocIdSetBuilder(maxDoc);
-      BitDocIdSetBuilder exactBuilder = new BitDocIdSetBuilder(maxDoc);
-      BitDocIdSet exactDocIdSet;
-      BitDocIdSet approxDocIdSet;
+      DocIdSetBuilder approxBuilder = new DocIdSetBuilder(maxDoc);
+      DocIdSetBuilder exactBuilder = new DocIdSetBuilder(maxDoc);
+      boolean approxIsEmpty = true;
+      boolean exactIsEmpty = true;
+      DocIdSet exactDocIdSet;
+      DocIdSet approxDocIdSet;
 
       public IntersectsDifferentiatingVisitor(LeafReaderContext context, Bits acceptDocs) throws IOException {
         super(context, acceptDocs);
@@ -168,12 +175,16 @@ public class IntersectsRPTVerifyQuery ex
 
       @Override
       protected DocIdSet finish() throws IOException {
-        exactDocIdSet = exactBuilder.build();
-        if (approxBuilder.isDefinitelyEmpty()) {
+        if (exactIsEmpty) {
+          exactDocIdSet = null;
+        } else {
+          exactDocIdSet = exactBuilder.build();
+        }
+        if (approxIsEmpty) {
           approxDocIdSet = exactDocIdSet;//optimization
         } else {
           if (exactDocIdSet != null) {
-            approxBuilder.or(exactDocIdSet.iterator());
+            approxBuilder.add(exactDocIdSet.iterator());
           }
           approxDocIdSet = approxBuilder.build();
         }
@@ -183,9 +194,11 @@ public class IntersectsRPTVerifyQuery ex
       @Override
       protected boolean visitPrefix(Cell cell) throws IOException {
         if (cell.getShapeRel() == SpatialRelation.WITHIN) {
+          exactIsEmpty = false;
           collectDocs(exactBuilder);//note: we'll add exact to approx on finish()
           return false;
         } else if (cell.getLevel() == detailLevel) {
+          approxIsEmpty = false;
           collectDocs(approxBuilder);
           return false;
         }
@@ -195,8 +208,10 @@ public class IntersectsRPTVerifyQuery ex
       @Override
       protected void visitLeaf(Cell cell) throws IOException {
         if (cell.getShapeRel() == SpatialRelation.WITHIN) {
+          exactIsEmpty = false;
           collectDocs(exactBuilder);//note: we'll add exact to approx on finish()
         } else {
+          approxIsEmpty = false;
           collectDocs(approxBuilder);
         }
       }

Modified: lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial/prefix/AbstractPrefixTreeFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial/prefix/AbstractPrefixTreeFilter.java?rev=1691335&r1=1691334&r2=1691335&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial/prefix/AbstractPrefixTreeFilter.java (original)
+++ lucene/dev/trunk/lucene/spatial/src/java/org/apache/lucene/spatial/prefix/AbstractPrefixTreeFilter.java Thu Jul 16 08:49:55 2015
@@ -29,9 +29,9 @@ import org.apache.lucene.index.Terms;
 import org.apache.lucene.index.TermsEnum;
 import org.apache.lucene.search.Filter;
 import org.apache.lucene.spatial.prefix.tree.SpatialPrefixTree;
-import org.apache.lucene.spatial.util.BitDocIdSetBuilder;
 import org.apache.lucene.util.BitSet;
 import org.apache.lucene.util.Bits;
+import org.apache.lucene.util.DocIdSetBuilder;
 
 /**
  * Base class for Lucene Filters on SpatialPrefixTree fields.
@@ -102,10 +102,10 @@ public abstract class AbstractPrefixTree
       bitSet.or(wrap(postingsEnum, acceptDocs));
     }
 
-    protected void collectDocs(BitDocIdSetBuilder bitSetBuilder) throws IOException {
+    protected void collectDocs(DocIdSetBuilder docSetBuilder) throws IOException {
       assert termsEnum != null;
       postingsEnum = termsEnum.postings(postingsEnum, PostingsEnum.NONE);
-      bitSetBuilder.or(wrap(postingsEnum, acceptDocs));
+      docSetBuilder.add(wrap(postingsEnum, acceptDocs));
     }
   }