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/07/04 22:15:20 UTC
svn commit: r791176 - in
/lucene/java/trunk/src/java/org/apache/lucene/search: RangeFilter.java
RangeQuery.java
Author: uschindler
Date: Sat Jul 4 20:15:20 2009
New Revision: 791176
URL: http://svn.apache.org/viewvc?rev=791176&view=rev
Log:
LUCENE-1713: Rename RangeQuery -> TermRangeQuery (part 2)
Added:
lucene/java/trunk/src/java/org/apache/lucene/search/RangeFilter.java (with props)
lucene/java/trunk/src/java/org/apache/lucene/search/RangeQuery.java (with props)
Added: lucene/java/trunk/src/java/org/apache/lucene/search/RangeFilter.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/RangeFilter.java?rev=791176&view=auto
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/RangeFilter.java (added)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/RangeFilter.java Sat Jul 4 20:15:20 2009
@@ -0,0 +1,92 @@
+package org.apache.lucene.search;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.text.Collator;
+
+/**
+ * A Filter that restricts search results to a range of values in a given
+ * field.
+ *
+ * <p>This filter matches the documents looking for terms that fall into the
+ * supplied range according to {@link String#compareTo(String)}. It is not intended
+ * for numerical ranges, use {@link NumericRangeFilter} instead.
+ *
+ * <p>If you construct a large number of range filters with different ranges but on the
+ * same field, {@link FieldCacheRangeFilter} may have significantly better performance.
+ *
+ * @deprecated Use {@link TermRangeFilter} for term ranges or
+ * {@link NumericRangeFilter} for numeric ranges instead.
+ * This class will be removed in Lucene 3.0.
+ */
+public class RangeFilter extends MultiTermQueryWrapperFilter {
+
+ /**
+ * @param fieldName The field this range applies to
+ * @param lowerTerm The lower bound on this range
+ * @param upperTerm The upper bound on this range
+ * @param includeLower Does this range include the lower bound?
+ * @param includeUpper Does this range include the upper bound?
+ * @throws IllegalArgumentException if both terms are null or if
+ * lowerTerm is null and includeLower is true (similar for upperTerm
+ * and includeUpper)
+ */
+ public RangeFilter(String fieldName, String lowerTerm, String upperTerm,
+ boolean includeLower, boolean includeUpper) {
+ super(new TermRangeQuery(fieldName, lowerTerm, upperTerm, includeLower, includeUpper));
+ }
+
+ /**
+ * <strong>WARNING:</strong> Using this constructor and supplying a non-null
+ * value in the <code>collator</code> parameter will cause every single
+ * index Term in the Field referenced by lowerTerm and/or upperTerm to be
+ * examined. Depending on the number of index Terms in this Field, the
+ * operation could be very slow.
+ *
+ * @param lowerTerm The lower bound on this range
+ * @param upperTerm The upper bound on this range
+ * @param includeLower Does this range include the lower bound?
+ * @param includeUpper Does this range include the upper bound?
+ * @param collator The collator to use when determining range inclusion; set
+ * to null to use Unicode code point ordering instead of collation.
+ * @throws IllegalArgumentException if both terms are null or if
+ * lowerTerm is null and includeLower is true (similar for upperTerm
+ * and includeUpper)
+ */
+ public RangeFilter(String fieldName, String lowerTerm, String upperTerm,
+ boolean includeLower, boolean includeUpper,
+ Collator collator) {
+ super(new TermRangeQuery(fieldName, lowerTerm, upperTerm, includeLower, includeUpper, collator));
+ }
+
+ /**
+ * Constructs a filter for field <code>fieldName</code> matching
+ * less than or equal to <code>upperTerm</code>.
+ */
+ public static RangeFilter Less(String fieldName, String upperTerm) {
+ return new RangeFilter(fieldName, null, upperTerm, false, true);
+ }
+
+ /**
+ * Constructs a filter for field <code>fieldName</code> matching
+ * greater than or equal to <code>lowerTerm</code>.
+ */
+ public static RangeFilter More(String fieldName, String lowerTerm) {
+ return new RangeFilter(fieldName, lowerTerm, null, true, false);
+ }
+}
Propchange: lucene/java/trunk/src/java/org/apache/lucene/search/RangeFilter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: lucene/java/trunk/src/java/org/apache/lucene/search/RangeFilter.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: lucene/java/trunk/src/java/org/apache/lucene/search/RangeQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/RangeQuery.java?rev=791176&view=auto
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/RangeQuery.java (added)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/RangeQuery.java Sat Jul 4 20:15:20 2009
@@ -0,0 +1,152 @@
+package org.apache.lucene.search;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.text.Collator;
+import java.io.IOException;
+
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.Term;
+
+/**
+ * A Query that matches documents within an exclusive range of terms.
+ *
+ * <p>This query matches the documents looking for terms that fall into the
+ * supplied range according to {@link String#compareTo(String)}. It is not intended
+ * for numerical ranges, use {@link NumericRangeQuery} instead.
+ *
+ * <p>See {@link MultiTermQuery#setConstantScoreRewrite} for the tradeoffs between
+ * enabling and disabling constantScoreRewrite mode.
+ *
+ * @deprecated Use {@link TermRangeQuery} for term ranges or
+ * {@link NumericRangeQuery} for numeric ranges instead.
+ * This class will be removed in Lucene 3.0.
+ */
+public class RangeQuery extends Query {
+ private final TermRangeQuery delegate;
+
+ /** Constructs a query selecting all terms greater than
+ * <code>lowerTerm</code> but less than <code>upperTerm</code>.
+ * There must be at least one term and either term may be null,
+ * in which case there is no bound on that side, but if there are
+ * two terms, both terms <b>must</b> be for the same field.
+ *
+ * @param lowerTerm The Term at the lower end of the range
+ * @param upperTerm The Term at the upper end of the range
+ * @param inclusive If true, both <code>lowerTerm</code> and
+ * <code>upperTerm</code> will themselves be included in the range.
+ */
+ public RangeQuery(Term lowerTerm, Term upperTerm, boolean inclusive) {
+ this(lowerTerm, upperTerm, inclusive, null);
+ }
+
+ /** Constructs a query selecting all terms greater than
+ * <code>lowerTerm</code> but less than <code>upperTerm</code>.
+ * There must be at least one term and either term may be null,
+ * in which case there is no bound on that side, but if there are
+ * two terms, both terms <b>must</b> be for the same field.
+ * <p>
+ * If <code>collator</code> is not null, it will be used to decide whether
+ * index terms are within the given range, rather than using the Unicode code
+ * point order in which index terms are stored.
+ * <p>
+ * <strong>WARNING:</strong> Using this constructor and supplying a non-null
+ * value in the <code>collator</code> parameter will cause every single
+ * index Term in the Field referenced by lowerTerm and/or upperTerm to be
+ * examined. Depending on the number of index Terms in this Field, the
+ * operation could be very slow.
+ *
+ * @param lowerTerm The Term at the lower end of the range
+ * @param upperTerm The Term at the upper end of the range
+ * @param inclusive If true, both <code>lowerTerm</code> and
+ * <code>upperTerm</code> will themselves be included in the range.
+ * @param collator The collator to use to collate index Terms, to determine
+ * their membership in the range bounded by <code>lowerTerm</code> and
+ * <code>upperTerm</code>.
+ */
+ public RangeQuery(Term lowerTerm, Term upperTerm, boolean inclusive, Collator collator) {
+ if (lowerTerm == null && upperTerm == null)
+ throw new IllegalArgumentException("At least one term must be non-null");
+ if (lowerTerm != null && upperTerm != null && lowerTerm.field() != upperTerm.field())
+ throw new IllegalArgumentException("Both terms must have the same field");
+
+ delegate = new TermRangeQuery(
+ (lowerTerm == null) ? upperTerm.field() : lowerTerm.field(),
+ (lowerTerm == null) ? null : lowerTerm.text(),
+ (upperTerm == null) ? null : upperTerm.text(),
+ inclusive, inclusive,
+ collator
+ );
+ delegate.setConstantScoreRewrite(false);
+ }
+
+ public void setBoost(float b) {
+ super.setBoost(b);
+ delegate.setBoost(b);
+ }
+
+ public Query rewrite(IndexReader reader) throws IOException {
+ return delegate.rewrite(reader);
+ }
+
+ /** Returns the field name for this query */
+ public String getField() {
+ return delegate.getField();
+ }
+
+ /** Returns the lower term of this range query. */
+ public Term getLowerTerm() {
+ final String term = delegate.getLowerTerm();
+ return (term == null) ? null : new Term(getField(), term);
+ }
+
+ /** Returns the upper term of this range query. */
+ public Term getUpperTerm() {
+ final String term = delegate.getUpperTerm();
+ return (term == null) ? null : new Term(getField(), term);
+ }
+
+ /** Returns <code>true</code> if the range query is inclusive */
+ public boolean isInclusive() {
+ return delegate.includesLower() && delegate.includesUpper();
+ }
+
+ /** Returns the collator used to determine range inclusion, if any. */
+ public Collator getCollator() {
+ return delegate.getCollator();
+ }
+
+ /** Prints a user-readable version of this query. */
+ public String toString(String field) {
+ return delegate.toString(field);
+ }
+
+ /** Returns true iff <code>o</code> is equal to this. */
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof RangeQuery)) return false;
+
+ final RangeQuery other = (RangeQuery) o;
+ return this.delegate.equals(other.delegate);
+ }
+
+ /** Returns a hash code value for this object.*/
+ public int hashCode() {
+ return delegate.hashCode();
+ }
+}
Propchange: lucene/java/trunk/src/java/org/apache/lucene/search/RangeQuery.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: lucene/java/trunk/src/java/org/apache/lucene/search/RangeQuery.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL