SOLR-6215: TrieDateField should directly extend TrieField instead of forwarding to a wrapped TrieField

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1606794 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Steven Rowe 2014-06-30 15:46:54 +00:00
parent 2236e22898
commit b7290e523b
5 changed files with 16 additions and 150 deletions

View File

@ -87,6 +87,9 @@ Other Changes
* SOLR-6169: Finish removal of CoreAdminHandler handleAlias action begun in 4.9 * SOLR-6169: Finish removal of CoreAdminHandler handleAlias action begun in 4.9
(Alan Woodward) (Alan Woodward)
* SOLR-6215: TrieDateField should directly extend TrieField instead of
forwarding to a wrapped TrieField. (Steve Rowe)
================== 4.10.0 ================= ================== 4.10.0 =================
Versions of Major Components Versions of Major Components

View File

@ -244,11 +244,12 @@ public abstract class RangeEndpointCalculator<T extends Comparable<T>> {
case LONG: case LONG:
calc = new LongRangeEndpointCalculator(request); calc = new LongRangeEndpointCalculator(request);
break; break;
case DATE:
calc = new DateRangeEndpointCalculator(request, null);
break;
default: default:
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unable to range facet on tried field of unexpected type:" + sf.getName()); throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unable to range facet on tried field of unexpected type:" + sf.getName());
} }
} else if (ft instanceof TrieDateField) {
calc = new DateRangeEndpointCalculator(request, null);
} else { } else {
throw new SolrException (SolrException.ErrorCode.BAD_REQUEST, "Unable to range facet on field:" + sf); throw new SolrException (SolrException.ErrorCode.BAD_REQUEST, "Unable to range facet on field:" + sf);
} }

View File

@ -1026,13 +1026,14 @@ public class SimpleFacets {
case LONG: case LONG:
calc = new LongRangeEndpointCalculator(sf); calc = new LongRangeEndpointCalculator(sf);
break; break;
case DATE:
calc = new DateRangeEndpointCalculator(sf, null);
break;
default: default:
throw new SolrException throw new SolrException
(SolrException.ErrorCode.BAD_REQUEST, (SolrException.ErrorCode.BAD_REQUEST,
"Unable to range facet on tried field of unexpected type:" + f); "Unable to range facet on tried field of unexpected type:" + f);
} }
} else if (ft instanceof TrieDateField) {
calc = new DateRangeEndpointCalculator(sf, null);
} else { } else {
throw new SolrException throw new SolrException
(SolrException.ErrorCode.BAD_REQUEST, (SolrException.ErrorCode.BAD_REQUEST,

View File

@ -21,18 +21,11 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.util.DateUtil; import org.apache.solr.common.util.DateUtil;
import org.apache.solr.request.SolrQueryRequest; import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.search.QParser; import org.apache.solr.search.QParser;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.update.processor.TimestampUpdateProcessorFactory; //jdoc import org.apache.solr.update.processor.TimestampUpdateProcessorFactory; //jdoc
import org.apache.solr.util.DateMathParser; import org.apache.solr.util.DateMathParser;
import org.apache.lucene.document.FieldType.NumericType;
import org.apache.lucene.index.StorableField; import org.apache.lucene.index.StorableField;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.Query; import org.apache.lucene.search.Query;
import org.apache.lucene.search.NumericRangeQuery; import org.apache.lucene.search.NumericRangeQuery;
import org.apache.lucene.uninverting.UninvertingReader.Type;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.CharsRef;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.DecimalFormat; import java.text.DecimalFormat;
@ -42,11 +35,8 @@ import java.text.NumberFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.ParsePosition; import java.text.ParsePosition;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
import java.util.Date; import java.util.Date;
import java.io.IOException;
import java.util.TimeZone; import java.util.TimeZone;
/** /**
@ -109,8 +99,11 @@ import java.util.TimeZone;
* *
* @see TrieField * @see TrieField
*/ */
public class TrieDateField extends PrimitiveFieldType implements DateValueFieldType { public class TrieDateField extends TrieField implements DateValueFieldType {
{
type = TrieTypes.DATE;
}
public static final TimeZone UTC = TimeZone.getTimeZone("UTC"); public static final TimeZone UTC = TimeZone.getTimeZone("UTC");
/** /**
@ -254,8 +247,6 @@ public class TrieDateField extends PrimitiveFieldType implements DateValueFieldT
} }
} }
/** /**
* Thread safe DateFormat that can <b>format</b> in the canonical * Thread safe DateFormat that can <b>format</b> in the canonical
* ISO8601 date format, not including the trailing "Z" (since it is * ISO8601 date format, not including the trailing "Z" (since it is
@ -341,144 +332,16 @@ public class TrieDateField extends PrimitiveFieldType implements DateValueFieldT
} }
} }
final TrieField wrappedField = new TrieField() {{
type = TrieTypes.DATE;
}};
@Override
protected void init(IndexSchema schema, Map<String, String> args) {
wrappedField.init(schema, args);
}
@Override @Override
public Date toObject(StorableField f) { public Date toObject(StorableField f) {
return (Date) wrappedField.toObject(f); return (Date)super.toObject(f);
} }
@Override
public Object toObject(SchemaField sf, BytesRef term) {
return wrappedField.toObject(sf, term);
}
@Override
public SortField getSortField(SchemaField field, boolean top) {
return wrappedField.getSortField(field, top);
}
@Override
public Type getUninversionType(SchemaField sf) {
return wrappedField.getUninversionType(sf);
}
@Override
public Object marshalSortValue(Object value) {
return value;
}
@Override
public Object unmarshalSortValue(Object value) {
return value;
}
@Override
public ValueSource getValueSource(SchemaField field, QParser parser) {
return wrappedField.getValueSource(field, parser);
}
/**
* @return the precisionStep used to index values into the field
*/
public int getPrecisionStep() {
return wrappedField.getPrecisionStep();
}
@Override
public NumericType getNumericType() {
return wrappedField.getNumericType();
}
@Override
public void write(TextResponseWriter writer, String name, StorableField f) throws IOException {
wrappedField.write(writer, name, f);
}
@Override
public boolean isTokenized() {
return wrappedField.isTokenized();
}
@Override
public boolean multiValuedFieldCache() {
return wrappedField.multiValuedFieldCache();
}
@Override
public String storedToReadable(StorableField f) {
return wrappedField.storedToReadable(f);
}
@Override
public String readableToIndexed(String val) {
return wrappedField.readableToIndexed(val);
}
@Override
public String toInternal(String val) {
return wrappedField.toInternal(val);
}
@Override
public String toExternal(StorableField f) {
return wrappedField.toExternal(f);
}
@Override
public String indexedToReadable(String _indexedForm) {
return wrappedField.indexedToReadable(_indexedForm);
}
@Override
public CharsRef indexedToReadable(BytesRef input, CharsRef charsRef) {
// TODO: this could be more efficient, but the sortable types should be deprecated instead
return wrappedField.indexedToReadable(input, charsRef);
}
@Override
public String storedToIndexed(StorableField f) {
return wrappedField.storedToIndexed(f);
}
@Override
public StorableField createField(SchemaField field, Object value, float boost) {
return wrappedField.createField(field, value, boost);
}
@Override
public List<StorableField> createFields(SchemaField field, Object value, float boost) {
return wrappedField.createFields(field, value, boost);
}
@Override
public Query getRangeQuery(QParser parser, SchemaField field, String min, String max, boolean minInclusive, boolean maxInclusive) {
return wrappedField.getRangeQuery(parser, field, min, max, minInclusive, maxInclusive);
}
@Override
protected boolean hasProperty(int p) {
return wrappedField.hasProperty(p);
}
/** TrieDateField specific range query */ /** TrieDateField specific range query */
public Query getRangeQuery(QParser parser, SchemaField sf, Date min, Date max, boolean minInclusive, boolean maxInclusive) { public Query getRangeQuery(QParser parser, SchemaField sf, Date min, Date max, boolean minInclusive, boolean maxInclusive) {
return NumericRangeQuery.newLongRange(sf.getName(), wrappedField.precisionStep, return NumericRangeQuery.newLongRange(sf.getName(), precisionStep,
min == null ? null : min.getTime(), min == null ? null : min.getTime(),
max == null ? null : max.getTime(), max == null ? null : max.getTime(),
minInclusive, maxInclusive); minInclusive, maxInclusive);
} }
@Override
public void checkSchemaField(SchemaField field) {
wrappedField.checkSchemaField(field);
}
} }

View File

@ -711,8 +711,6 @@ public class TrieField extends PrimitiveFieldType {
* that indexes multiple precisions per value. * that indexes multiple precisions per value.
*/ */
public static String getMainValuePrefix(org.apache.solr.schema.FieldType ft) { public static String getMainValuePrefix(org.apache.solr.schema.FieldType ft) {
if (ft instanceof TrieDateField)
ft = ((TrieDateField) ft).wrappedField;
if (ft instanceof TrieField) { if (ft instanceof TrieField) {
final TrieField trie = (TrieField)ft; final TrieField trie = (TrieField)ft;
if (trie.precisionStep == Integer.MAX_VALUE) if (trie.precisionStep == Integer.MAX_VALUE)