You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-dev@lucene.apache.org by Yonik Seeley <ys...@gmail.com> on 2006/06/11 04:22:32 UTC

Re: svn commit: r413399 - in /incubator/solr/trunk: ./ src/java/org/apache/solr/search/ src/test/org/apache/solr/search/

Silly me... I had implemented an efficient
HashDocSet.andNotSize(other), and the I realized that it's simply
equivalent to this.size() - this.intersectionSize(other).

-Yonik

On 6/10/06, yonik@apache.org <yo...@apache.org> wrote:
> Author: yonik
> Date: Sat Jun 10 19:18:38 2006
> New Revision: 413399
>
> URL: http://svn.apache.org/viewvc?rev=413399&view=rev
> Log:
> DocSet.andNot(),andNotSize()
>
> Modified:
>     incubator/solr/trunk/CHANGES.txt
>     incubator/solr/trunk/src/java/org/apache/solr/search/BitDocSet.java
>     incubator/solr/trunk/src/java/org/apache/solr/search/DocSet.java
>     incubator/solr/trunk/src/java/org/apache/solr/search/HashDocSet.java
>     incubator/solr/trunk/src/test/org/apache/solr/search/DocSetPerf.java
>     incubator/solr/trunk/src/test/org/apache/solr/search/TestDocSet.java
>
> Modified: incubator/solr/trunk/CHANGES.txt
> URL: http://svn.apache.org/viewvc/incubator/solr/trunk/CHANGES.txt?rev=413399&r1=413398&r2=413399&view=diff
> ==============================================================================
> --- incubator/solr/trunk/CHANGES.txt (original)
> +++ incubator/solr/trunk/CHANGES.txt Sat Jun 10 19:18:38 2006
> @@ -17,6 +17,7 @@
>   9. Added KeywordTokenizerFactory (hossman)
>  10. copyField accepts dynamicfield-like names as the source.
>      (Darren Erik Vengroff via yonik, SOLR-21)
> +11. new DocSet.andNot(), DocSet.andNotSize() (yonik)
>
>  Changes in runtime behavior
>   1. classes reorganized into different packages, package names changed to Apache
>
> Modified: incubator/solr/trunk/src/java/org/apache/solr/search/BitDocSet.java
> URL: http://svn.apache.org/viewvc/incubator/solr/trunk/src/java/org/apache/solr/search/BitDocSet.java?rev=413399&r1=413398&r2=413399&view=diff
> ==============================================================================
> --- incubator/solr/trunk/src/java/org/apache/solr/search/BitDocSet.java (original)
> +++ incubator/solr/trunk/src/java/org/apache/solr/search/BitDocSet.java Sat Jun 10 19:18:38 2006
> @@ -143,6 +143,7 @@
>      return bits.get(doc);
>    }
>
> +  @Override
>    public int intersectionSize(DocSet other) {
>      if (other instanceof BitDocSet) {
>        return (int)OpenBitSet.intersectionCount(this.bits, ((BitDocSet)other).bits);
> @@ -152,12 +153,25 @@
>      }
>    }
>
> +  @Override
>    public int unionSize(DocSet other) {
>      if (other instanceof BitDocSet) {
>        return (int)OpenBitSet.unionCount(this.bits, ((BitDocSet)other).bits);
>      } else {
>        // they had better not call us back!
>        return other.unionSize(this);
> +    }
> +  }
> +
> +  @Override
> +  public int andNotSize(DocSet other) {
> +    if (other instanceof BitDocSet) {
> +      // if we don't know our current size, this is faster than
> +      // size - intersection_size
> +      return (int)OpenBitSet.andNotCount(this.bits, ((BitDocSet)other).bits);
> +    } else {
> +      // use BaseDocSet's size-intersection_size
> +      return super.andNotSize(other);
>      }
>    }
>
>
> Modified: incubator/solr/trunk/src/java/org/apache/solr/search/DocSet.java
> URL: http://svn.apache.org/viewvc/incubator/solr/trunk/src/java/org/apache/solr/search/DocSet.java?rev=413399&r1=413398&r2=413399&view=diff
> ==============================================================================
> --- incubator/solr/trunk/src/java/org/apache/solr/search/DocSet.java (original)
> +++ incubator/solr/trunk/src/java/org/apache/solr/search/DocSet.java Sat Jun 10 19:18:38 2006
> @@ -124,6 +124,17 @@
>     */
>    public int unionSize(DocSet other);
>
> +  /**
> +   * Returns the documents in this set that are not in the other set. Neither set is modified - a new DocSet is
> +   * created and returned.
> +   * @return a DocSet representing this AND NOT other
> +   */
> +  public DocSet andNot(DocSet other);
> +
> +  /**
> +   * Returns the number of documents in this set that are not in the other set.
> +   */
> +  public int andNotSize(DocSet other);
>  }
>
>  /** A base class that may be usefull for implementing DocSets */
> @@ -208,11 +219,20 @@
>      return intersection(other).size();
>    }
>
> -  // TODO: do an efficient implementation
> +  // subclasses have more efficient implementations
>    public int unionSize(DocSet other) {
>      return union(other).size();
>    }
>
> +  public DocSet andNot(DocSet other) {
> +    OpenBitSet newbits = (OpenBitSet)(this.getBits().clone());
> +    newbits.andNot(other.getBits());
> +    return new BitDocSet(newbits);
> +  }
> +
> +  public int andNotSize(DocSet other) {
> +    return this.size() - this.intersectionSize(other);
> +  }
>  }
>
>
>
> Modified: incubator/solr/trunk/src/java/org/apache/solr/search/HashDocSet.java
> URL: http://svn.apache.org/viewvc/incubator/solr/trunk/src/java/org/apache/solr/search/HashDocSet.java?rev=413399&r1=413398&r2=413399&view=diff
> ==============================================================================
> --- incubator/solr/trunk/src/java/org/apache/solr/search/HashDocSet.java (original)
> +++ incubator/solr/trunk/src/java/org/apache/solr/search/HashDocSet.java Sat Jun 10 19:18:38 2006
> @@ -278,7 +278,7 @@
>    public int unionSize(DocSet other) {
>     if (other instanceof HashDocSet) {
>       // set "a" to the smallest doc set for the most efficient
> -     // intersection.
> +     // union count.
>       final HashDocSet a = size()<=other.size() ? this : (HashDocSet)other;
>       final HashDocSet b = size()<=other.size() ? (HashDocSet)other : this;
>
> @@ -302,5 +302,6 @@
>     }
>    }
>
> -
> +  // don't implement andNotSize() on purpose... if one of the sets is a HashDocSet,
> +  // its easier to get the intersection size and subtract (implementation in BaseDocSet)
>  }
>
> Modified: incubator/solr/trunk/src/test/org/apache/solr/search/DocSetPerf.java
> URL: http://svn.apache.org/viewvc/incubator/solr/trunk/src/test/org/apache/solr/search/DocSetPerf.java?rev=413399&r1=413398&r2=413399&view=diff
> ==============================================================================
> --- incubator/solr/trunk/src/test/org/apache/solr/search/DocSetPerf.java (original)
> +++ incubator/solr/trunk/src/test/org/apache/solr/search/DocSetPerf.java Sat Jun 10 19:18:38 2006
> @@ -14,7 +14,7 @@
>   * limitations under the License.
>   */
>
> -package org.apache.solr.search.test;
> +package org.apache.solr.search;
>
>  import org.apache.solr.search.BitDocSet;
>  import org.apache.solr.search.HashDocSet;
>
> Modified: incubator/solr/trunk/src/test/org/apache/solr/search/TestDocSet.java
> URL: http://svn.apache.org/viewvc/incubator/solr/trunk/src/test/org/apache/solr/search/TestDocSet.java?rev=413399&r1=413398&r2=413399&view=diff
> ==============================================================================
> --- incubator/solr/trunk/src/test/org/apache/solr/search/TestDocSet.java (original)
> +++ incubator/solr/trunk/src/test/org/apache/solr/search/TestDocSet.java Sat Jun 10 19:18:38 2006
> @@ -64,14 +64,15 @@
>      OpenBitSet a_and = (OpenBitSet)a1.clone(); a_and.and(a2);
>      OpenBitSet a_or = (OpenBitSet)a1.clone(); a_or.or(a2);
>      // OpenBitSet a_xor = (OpenBitSet)a1.clone(); a_xor.xor(a2);
> -    // OpenBitSet a_andn = (OpenBitSet)a1.clone(); a_andn.andNot(a2);
> +    OpenBitSet a_andn = (OpenBitSet)a1.clone(); a_andn.andNot(a2);
>
>      checkEqual(a_and, b1.intersection(b2));
>      checkEqual(a_or, b1.union(b2));
> +    checkEqual(a_andn, b1.andNot(b2));
>
>      assertEquals(a_and.cardinality(), b1.intersectionSize(b2));
>      assertEquals(a_or.cardinality(), b1.unionSize(b2));
> -
> +    assertEquals(a_andn.cardinality(), b1.andNotSize(b2));
>    }