You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2009/10/27 17:49:21 UTC
svn commit: r830246 -
/jackrabbit/branches/1.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java
Author: mreutegg
Date: Tue Oct 27 16:49:21 2009
New Revision: 830246
URL: http://svn.apache.org/viewvc?rev=830246&view=rev
Log:
JCR-2353: Poor performance in range queries using dates
- reverting commit on branch
Modified:
jackrabbit/branches/1.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java
Modified: jackrabbit/branches/1.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java?rev=830246&r1=830245&r2=830246&view=diff
==============================================================================
--- jackrabbit/branches/1.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java (original)
+++ jackrabbit/branches/1.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java Tue Oct 27 16:49:21 2009
@@ -16,43 +16,33 @@
*/
package org.apache.jackrabbit.core.query.lucene;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.Weight;
+import org.apache.lucene.search.Searcher;
+import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.Explanation;
+import org.apache.lucene.search.Similarity;
+import org.apache.lucene.search.ConstantScoreRangeQuery;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.TermEnum;
+import org.apache.lucene.index.TermDocs;
+
import java.io.IOException;
-import java.util.ArrayList;
import java.util.BitSet;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
import java.util.Map;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.HashMap;
import java.util.Set;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.index.TermDocs;
-import org.apache.lucene.index.TermEnum;
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.Explanation;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.Scorer;
-import org.apache.lucene.search.Searcher;
-import org.apache.lucene.search.Similarity;
-import org.apache.lucene.search.Weight;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
/**
- * Implements a variant of the lucene class {@link org.apache.lucene.search.RangeQuery}.
- * This class does not rewrite to basic {@link org.apache.lucene.search.TermQuery}
- * but will calculate the matching documents itself. That way a
- * <code>TooManyClauses</code> can be avoided.
+ * Implements a lucene range query.
*/
public class RangeQuery extends Query implements Transformable {
/**
- * Logger instance for this class.
- */
- private static final Logger log = LoggerFactory.getLogger(RangeQuery.class);
-
- /**
* The lower term. May be <code>null</code> if <code>upperTerm</code> is not
* <code>null</code>.
*/
@@ -76,12 +66,6 @@
private int transform = TRANSFORM_NONE;
/**
- * The rewritten range query or <code>null</code> if the range spans more
- * than {@link org.apache.lucene.search.BooleanQuery#maxClauseCount} terms.
- */
- private Query stdRangeQuery;
-
- /**
* Creates a new RangeQuery. The lower or the upper term may be
* <code>null</code>, but not both!
*
@@ -130,9 +114,8 @@
}
/**
- * Tries to rewrite this query into a standard lucene RangeQuery.
- * This rewrite might fail with a TooManyClauses exception. If that
- * happens, we use our own implementation.
+ * Rewrites this query into a {@link ConstantScoreRangeQuery} if
+ * {@link #transform} is {@link #TRANSFORM_NONE}.
*
* @param reader the index reader.
* @return the rewritten query or this query if rewriting is not possible.
@@ -140,16 +123,9 @@
*/
public Query rewrite(IndexReader reader) throws IOException {
if (transform == TRANSFORM_NONE) {
- Query stdRangeQueryImpl
- = new org.apache.lucene.search.RangeQuery(lowerTerm, upperTerm, inclusive);
- try {
- stdRangeQuery = stdRangeQueryImpl.rewrite(reader);
- return stdRangeQuery;
- } catch (BooleanQuery.TooManyClauses e) {
- log.debug("Too many terms to enumerate, using custom RangeQuery");
- // failed, use own implementation
- return this;
- }
+ return new ConstantScoreRangeQuery(lowerTerm.field(),
+ lowerTerm.text(), upperTerm.text(), inclusive,
+ inclusive).rewrite(reader);
} else {
// always use our implementation when we need to transform the
// term enum
@@ -194,9 +170,7 @@
* {@inheritDoc}
*/
public void extractTerms(Set terms) {
- if (stdRangeQuery != null) {
- stdRangeQuery.extractTerms(terms);
- }
+ // cannot extract terms
}
/**