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