You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by us...@apache.org on 2009/11/21 20:49:54 UTC

svn commit: r882977 - in /lucene/java/trunk: CHANGES.txt src/java/org/apache/lucene/search/NumericRangeQuery.java

Author: uschindler
Date: Sat Nov 21 19:49:54 2009
New Revision: 882977

URL: http://svn.apache.org/viewvc?rev=882977&view=rev
Log:
LUCENE-2087: Remove recursion in NumericRangeTermEnum

Modified:
    lucene/java/trunk/CHANGES.txt
    lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java

Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=882977&r1=882976&r2=882977&view=diff
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Sat Nov 21 19:49:54 2009
@@ -18,7 +18,10 @@
 Optimizations
 
 * LUCENE-2086: When resolving deleted terms, do so in term sort order
-  for better performance (Bogdan Ghidireac via Mike McCandless)
+  for better performance. (Bogdan Ghidireac via Mike McCandless)
+
+* LUCENE-2087: Remove recursion in NumericRangeTermEnum.
+  (Uwe Schindler)
 
 Build
 

Modified: lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java?rev=882977&r1=882976&r2=882977&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java Sat Nov 21 19:49:54 2009
@@ -27,6 +27,7 @@
 import org.apache.lucene.util.StringHelper;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.Term;
+import org.apache.lucene.index.TermEnum;
 
 /**
  * <p>A {@link Query} that matches numeric values within a
@@ -486,6 +487,12 @@
       throw new UnsupportedOperationException("not implemented");
     }
 
+    /** this is a dummy, it is not used by this class. */
+    @Override
+    protected void setEnum(TermEnum tenum) {
+      throw new UnsupportedOperationException("not implemented");
+    }
+    
     /**
      * Compares if current upper bound is reached,
      * this also updates the term count for statistics.
@@ -507,29 +514,35 @@
         assert actualEnum != null;
         if (actualEnum.next()) {
           currentTerm = actualEnum.term();
-          if (termCompare(currentTerm)) return true;
+          if (termCompare(currentTerm))
+            return true;
         }
       }
+      
       // if all above fails, we go forward to the next enum,
       // if one is available
       currentTerm = null;
-      if (rangeBounds.size() < 2) {
-        assert rangeBounds.size() == 0;
-        return false;
-      }
-      // close the current enum and read next bounds
-      if (actualEnum != null) {
-        actualEnum.close();
-        actualEnum = null;
+      while (rangeBounds.size() >= 2) {
+        assert rangeBounds.size() % 2 == 0;
+        // close the current enum and read next bounds
+        if (actualEnum != null) {
+          actualEnum.close();
+          actualEnum = null;
+        }
+        final String lowerBound = rangeBounds.removeFirst();
+        this.currentUpperBound = rangeBounds.removeFirst();
+        // create a new enum
+        actualEnum = reader.terms(termTemplate.createTerm(lowerBound));
+        currentTerm = actualEnum.term();
+        if (currentTerm != null && termCompare(currentTerm))
+          return true;
+        // clear the current term for next iteration
+        currentTerm = null;
       }
-      final String lowerBound = rangeBounds.removeFirst();
-      this.currentUpperBound = rangeBounds.removeFirst();
-      // this call recursively uses next(), if no valid term in
-      // next enum found.
-      // if this behavior is changed/modified in the superclass,
-      // this enum will not work anymore!
-      setEnum(reader.terms(termTemplate.createTerm(lowerBound)));
-      return (currentTerm != null);
+      
+      // no more sub-range enums available
+      assert rangeBounds.size() == 0 && currentTerm == null;
+      return false;
     }
 
     /** Closes the enumeration to further activity, freeing resources.  */



RE: svn commit: r882977 - in /lucene/java/trunk: CHANGES.txt src/java/org/apache/lucene/search/NumericRangeQuery.java

Posted by Uwe Schindler <uw...@thetaphi.de>.
Yes since Tuesday.

-----
Uwe Schindler
H.-H.-Meier-Allee 63, D-28213 Bremen
http://www.thetaphi.de
eMail: uwe@thetaphi.de

> -----Original Message-----
> From: Simon Willnauer [mailto:simon.willnauer@googlemail.com]
> Sent: Saturday, November 21, 2009 9:00 PM
> To: java-dev@lucene.apache.org
> Subject: Re: svn commit: r882977 - in /lucene/java/trunk: CHANGES.txt
> src/java/org/apache/lucene/search/NumericRangeQuery.java
> 
> Is the trunk open for 3.1 already?
> 
> simon
> 
> On Sat, Nov 21, 2009 at 8:49 PM,  <us...@apache.org> wrote:
> > Author: uschindler
> > Date: Sat Nov 21 19:49:54 2009
> > New Revision: 882977
> >
> > URL: http://svn.apache.org/viewvc?rev=882977&view=rev
> > Log:
> > LUCENE-2087: Remove recursion in NumericRangeTermEnum
> >
> > Modified:
> >    lucene/java/trunk/CHANGES.txt
> >
>  lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.jav
> a
> >
> > Modified: lucene/java/trunk/CHANGES.txt
> > URL:
> http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=882977&r1=8
> 82976&r2=882977&view=diff
> >
> ==========================================================================
> ====
> > --- lucene/java/trunk/CHANGES.txt (original)
> > +++ lucene/java/trunk/CHANGES.txt Sat Nov 21 19:49:54 2009
> > @@ -18,7 +18,10 @@
> >  Optimizations
> >
> >  * LUCENE-2086: When resolving deleted terms, do so in term sort order
> > -  for better performance (Bogdan Ghidireac via Mike McCandless)
> > +  for better performance. (Bogdan Ghidireac via Mike McCandless)
> > +
> > +* LUCENE-2087: Remove recursion in NumericRangeTermEnum.
> > +  (Uwe Schindler)
> >
> >  Build
> >
> >
> > Modified:
> lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java
> > URL:
> http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/
> search/NumericRangeQuery.java?rev=882977&r1=882976&r2=882977&view=diff
> >
> ==========================================================================
> ====
> > ---
> lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java
> (original)
> > +++
> lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java
> Sat Nov 21 19:49:54 2009
> > @@ -27,6 +27,7 @@
> >  import org.apache.lucene.util.StringHelper;
> >  import org.apache.lucene.index.IndexReader;
> >  import org.apache.lucene.index.Term;
> > +import org.apache.lucene.index.TermEnum;
> >
> >  /**
> >  * <p>A {@link Query} that matches numeric values within a
> > @@ -486,6 +487,12 @@
> >       throw new UnsupportedOperationException("not implemented");
> >     }
> >
> > +    /** this is a dummy, it is not used by this class. */
> > +    @Override
> > +    protected void setEnum(TermEnum tenum) {
> > +      throw new UnsupportedOperationException("not implemented");
> > +    }
> > +
> >     /**
> >      * Compares if current upper bound is reached,
> >      * this also updates the term count for statistics.
> > @@ -507,29 +514,35 @@
> >         assert actualEnum != null;
> >         if (actualEnum.next()) {
> >           currentTerm = actualEnum.term();
> > -          if (termCompare(currentTerm)) return true;
> > +          if (termCompare(currentTerm))
> > +            return true;
> >         }
> >       }
> > +
> >       // if all above fails, we go forward to the next enum,
> >       // if one is available
> >       currentTerm = null;
> > -      if (rangeBounds.size() < 2) {
> > -        assert rangeBounds.size() == 0;
> > -        return false;
> > -      }
> > -      // close the current enum and read next bounds
> > -      if (actualEnum != null) {
> > -        actualEnum.close();
> > -        actualEnum = null;
> > +      while (rangeBounds.size() >= 2) {
> > +        assert rangeBounds.size() % 2 == 0;
> > +        // close the current enum and read next bounds
> > +        if (actualEnum != null) {
> > +          actualEnum.close();
> > +          actualEnum = null;
> > +        }
> > +        final String lowerBound = rangeBounds.removeFirst();
> > +        this.currentUpperBound = rangeBounds.removeFirst();
> > +        // create a new enum
> > +        actualEnum = reader.terms(termTemplate.createTerm(lowerBound));
> > +        currentTerm = actualEnum.term();
> > +        if (currentTerm != null && termCompare(currentTerm))
> > +          return true;
> > +        // clear the current term for next iteration
> > +        currentTerm = null;
> >       }
> > -      final String lowerBound = rangeBounds.removeFirst();
> > -      this.currentUpperBound = rangeBounds.removeFirst();
> > -      // this call recursively uses next(), if no valid term in
> > -      // next enum found.
> > -      // if this behavior is changed/modified in the superclass,
> > -      // this enum will not work anymore!
> > -      setEnum(reader.terms(termTemplate.createTerm(lowerBound)));
> > -      return (currentTerm != null);
> > +
> > +      // no more sub-range enums available
> > +      assert rangeBounds.size() == 0 && currentTerm == null;
> > +      return false;
> >     }
> >
> >     /** Closes the enumeration to further activity, freeing resources.
>  */
> >
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-dev-help@lucene.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-dev-help@lucene.apache.org


Re: svn commit: r882977 - in /lucene/java/trunk: CHANGES.txt src/java/org/apache/lucene/search/NumericRangeQuery.java

Posted by Simon Willnauer <si...@googlemail.com>.
Is the trunk open for 3.1 already?

simon

On Sat, Nov 21, 2009 at 8:49 PM,  <us...@apache.org> wrote:
> Author: uschindler
> Date: Sat Nov 21 19:49:54 2009
> New Revision: 882977
>
> URL: http://svn.apache.org/viewvc?rev=882977&view=rev
> Log:
> LUCENE-2087: Remove recursion in NumericRangeTermEnum
>
> Modified:
>    lucene/java/trunk/CHANGES.txt
>    lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java
>
> Modified: lucene/java/trunk/CHANGES.txt
> URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=882977&r1=882976&r2=882977&view=diff
> ==============================================================================
> --- lucene/java/trunk/CHANGES.txt (original)
> +++ lucene/java/trunk/CHANGES.txt Sat Nov 21 19:49:54 2009
> @@ -18,7 +18,10 @@
>  Optimizations
>
>  * LUCENE-2086: When resolving deleted terms, do so in term sort order
> -  for better performance (Bogdan Ghidireac via Mike McCandless)
> +  for better performance. (Bogdan Ghidireac via Mike McCandless)
> +
> +* LUCENE-2087: Remove recursion in NumericRangeTermEnum.
> +  (Uwe Schindler)
>
>  Build
>
>
> Modified: lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java
> URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java?rev=882977&r1=882976&r2=882977&view=diff
> ==============================================================================
> --- lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java (original)
> +++ lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java Sat Nov 21 19:49:54 2009
> @@ -27,6 +27,7 @@
>  import org.apache.lucene.util.StringHelper;
>  import org.apache.lucene.index.IndexReader;
>  import org.apache.lucene.index.Term;
> +import org.apache.lucene.index.TermEnum;
>
>  /**
>  * <p>A {@link Query} that matches numeric values within a
> @@ -486,6 +487,12 @@
>       throw new UnsupportedOperationException("not implemented");
>     }
>
> +    /** this is a dummy, it is not used by this class. */
> +    @Override
> +    protected void setEnum(TermEnum tenum) {
> +      throw new UnsupportedOperationException("not implemented");
> +    }
> +
>     /**
>      * Compares if current upper bound is reached,
>      * this also updates the term count for statistics.
> @@ -507,29 +514,35 @@
>         assert actualEnum != null;
>         if (actualEnum.next()) {
>           currentTerm = actualEnum.term();
> -          if (termCompare(currentTerm)) return true;
> +          if (termCompare(currentTerm))
> +            return true;
>         }
>       }
> +
>       // if all above fails, we go forward to the next enum,
>       // if one is available
>       currentTerm = null;
> -      if (rangeBounds.size() < 2) {
> -        assert rangeBounds.size() == 0;
> -        return false;
> -      }
> -      // close the current enum and read next bounds
> -      if (actualEnum != null) {
> -        actualEnum.close();
> -        actualEnum = null;
> +      while (rangeBounds.size() >= 2) {
> +        assert rangeBounds.size() % 2 == 0;
> +        // close the current enum and read next bounds
> +        if (actualEnum != null) {
> +          actualEnum.close();
> +          actualEnum = null;
> +        }
> +        final String lowerBound = rangeBounds.removeFirst();
> +        this.currentUpperBound = rangeBounds.removeFirst();
> +        // create a new enum
> +        actualEnum = reader.terms(termTemplate.createTerm(lowerBound));
> +        currentTerm = actualEnum.term();
> +        if (currentTerm != null && termCompare(currentTerm))
> +          return true;
> +        // clear the current term for next iteration
> +        currentTerm = null;
>       }
> -      final String lowerBound = rangeBounds.removeFirst();
> -      this.currentUpperBound = rangeBounds.removeFirst();
> -      // this call recursively uses next(), if no valid term in
> -      // next enum found.
> -      // if this behavior is changed/modified in the superclass,
> -      // this enum will not work anymore!
> -      setEnum(reader.terms(termTemplate.createTerm(lowerBound)));
> -      return (currentTerm != null);
> +
> +      // no more sub-range enums available
> +      assert rangeBounds.size() == 0 && currentTerm == null;
> +      return false;
>     }
>
>     /** Closes the enumeration to further activity, freeing resources.  */
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-dev-help@lucene.apache.org