LUCENE-4235: Remove enforcing of Filter rewrite for NRQ queries

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1363049 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Uwe Schindler 2012-07-18 19:08:24 +00:00
parent 24dae70408
commit cee33695d3
4 changed files with 7 additions and 34 deletions

View File

@ -54,6 +54,9 @@ Optimizations
* LUCENE-4184: Performance improvements to the aligned packed bits impl.
(Toke Eskildsen, Adrien Grand)
* LUCENE-4235: Remove enforcing of Filter rewrite for NRQ queries.
(Uwe Schindler)
Bug Fixes
* LUCENE-4176: Fix AnalyzingQueryParser to analyze range endpoints as bytes,

View File

@ -173,35 +173,6 @@ public final class NumericRangeQuery<T extends Number> extends MultiTermQuery {
this.max = max;
this.minInclusive = minInclusive;
this.maxInclusive = maxInclusive;
// For bigger precisionSteps this query likely
// hits too many terms, so set to CONSTANT_SCORE_FILTER right off
// (especially as the FilteredTermsEnum is costly if wasted only for AUTO tests because it
// creates new enums from IndexReader for each sub-range)
switch (dataType) {
case LONG:
case DOUBLE:
setRewriteMethod( (precisionStep > 6) ?
CONSTANT_SCORE_FILTER_REWRITE :
CONSTANT_SCORE_AUTO_REWRITE_DEFAULT
);
break;
case INT:
case FLOAT:
setRewriteMethod( (precisionStep > 8) ?
CONSTANT_SCORE_FILTER_REWRITE :
CONSTANT_SCORE_AUTO_REWRITE_DEFAULT
);
break;
default:
// should never happen
throw new IllegalArgumentException("Invalid numeric NumericType");
}
// shortcut if upper bound == lower bound
if (min != null && min.equals(max)) {
setRewriteMethod(CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE);
}
}
/**
@ -319,9 +290,10 @@ public final class NumericRangeQuery<T extends Number> extends MultiTermQuery {
@Override @SuppressWarnings("unchecked")
protected TermsEnum getTermsEnum(final Terms terms, AttributeSource atts) throws IOException {
// very strange: java.lang.Number itsself is not Comparable, but all subclasses used here are
return (min != null && max != null && ((Comparable<T>) min).compareTo(max) > 0) ?
TermsEnum.EMPTY :
new NumericRangeTermsEnum(terms.iterator(null));
if (min != null && max != null && ((Comparable<T>) min).compareTo(max) > 0) {
return TermsEnum.EMPTY;
}
return new NumericRangeTermsEnum(terms.iterator(null));
}
/** Returns <code>true</code> if the lower endpoint is inclusive */

View File

@ -211,7 +211,6 @@ public class TestNumericRangeQuery32 extends LuceneTestCase {
@Test
public void testOneMatchQuery() throws Exception {
NumericRangeQuery<Integer> q = NumericRangeQuery.newIntRange("ascfield8", 8, 1000, 1000, true, true);
assertSame(MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE, q.getRewriteMethod());
TopDocs topDocs = searcher.search(q, noDocs);
ScoreDoc[] sd = topDocs.scoreDocs;
assertNotNull(sd);

View File

@ -226,7 +226,6 @@ public class TestNumericRangeQuery64 extends LuceneTestCase {
@Test
public void testOneMatchQuery() throws Exception {
NumericRangeQuery<Long> q = NumericRangeQuery.newLongRange("ascfield8", 8, 1000L, 1000L, true, true);
assertSame(MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE, q.getRewriteMethod());
TopDocs topDocs = searcher.search(q, noDocs);
ScoreDoc[] sd = topDocs.scoreDocs;
assertNotNull(sd);