Mapper: `date` type to also allow providing values in numeric (milliseconds since epoch), closes #516.
This commit is contained in:
parent
6d214d69b9
commit
b1db5c43d6
|
@ -131,7 +131,7 @@ public class DateFieldMapper extends NumberFieldMapper<Long> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public Long valueFromString(String value) {
|
@Override public Long valueFromString(String value) {
|
||||||
return dateTimeFormatter.parser().parseMillis(value);
|
return parseStringValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -155,15 +155,15 @@ public class DateFieldMapper extends NumberFieldMapper<Long> {
|
||||||
|
|
||||||
@Override public Query rangeQuery(String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
@Override public Query rangeQuery(String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
||||||
return NumericRangeQuery.newLongRange(names.indexName(), precisionStep,
|
return NumericRangeQuery.newLongRange(names.indexName(), precisionStep,
|
||||||
lowerTerm == null ? null : dateTimeFormatter.parser().parseMillis(lowerTerm),
|
lowerTerm == null ? null : parseStringValue(lowerTerm),
|
||||||
upperTerm == null ? null : dateTimeFormatter.parser().parseMillis(upperTerm),
|
upperTerm == null ? null : parseStringValue(upperTerm),
|
||||||
includeLower, includeUpper);
|
includeLower, includeUpper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public Filter rangeFilter(String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
@Override public Filter rangeFilter(String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
||||||
return NumericRangeFilter.newLongRange(names.indexName(), precisionStep,
|
return NumericRangeFilter.newLongRange(names.indexName(), precisionStep,
|
||||||
lowerTerm == null ? null : dateTimeFormatter.parser().parseMillis(lowerTerm),
|
lowerTerm == null ? null : parseStringValue(lowerTerm),
|
||||||
upperTerm == null ? null : dateTimeFormatter.parser().parseMillis(upperTerm),
|
upperTerm == null ? null : parseStringValue(upperTerm),
|
||||||
includeLower, includeUpper);
|
includeLower, includeUpper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,7 +189,7 @@ public class DateFieldMapper extends NumberFieldMapper<Long> {
|
||||||
context.allEntries().addText(names.fullName(), dateAsString, boost);
|
context.allEntries().addText(names.fullName(), dateAsString, boost);
|
||||||
}
|
}
|
||||||
|
|
||||||
long value = dateTimeFormatter.parser().parseMillis(dateAsString);
|
long value = parseStringValue(dateAsString);
|
||||||
Field field = null;
|
Field field = null;
|
||||||
if (stored()) {
|
if (stored()) {
|
||||||
field = new Field(names.indexName(), Numbers.longToBytes(value), store);
|
field = new Field(names.indexName(), Numbers.longToBytes(value), store);
|
||||||
|
@ -248,4 +248,16 @@ public class DateFieldMapper extends NumberFieldMapper<Long> {
|
||||||
builder.field("include_in_all", includeInAll);
|
builder.field("include_in_all", includeInAll);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private long parseStringValue(String value) {
|
||||||
|
try {
|
||||||
|
return dateTimeFormatter.parser().parseMillis(value);
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
try {
|
||||||
|
return Long.parseLong(value);
|
||||||
|
} catch (NumberFormatException e1) {
|
||||||
|
throw new MapperParsingException("failed to parse date field, tried both date format [" + dateTimeFormatter.format() + "], and timestamp number", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue