|
@@ -22,6 +22,7 @@ package org.elasticsearch.index.mapper.date;
|
|
|
import org.apache.lucene.analysis.NumericTokenStream.NumericTermAttribute;
|
|
|
import org.apache.lucene.analysis.TokenStream;
|
|
|
import org.apache.lucene.index.DocValuesType;
|
|
|
+import org.apache.lucene.index.IndexableField;
|
|
|
import org.apache.lucene.search.Filter;
|
|
|
import org.apache.lucene.search.NumericRangeFilter;
|
|
|
import org.elasticsearch.ElasticsearchIllegalArgumentException;
|
|
@@ -38,10 +39,12 @@ import org.elasticsearch.index.mapper.DocumentMapperParser;
|
|
|
import org.elasticsearch.index.mapper.FieldMapper;
|
|
|
import org.elasticsearch.index.mapper.MapperParsingException;
|
|
|
import org.elasticsearch.index.mapper.ParseContext;
|
|
|
+import org.elasticsearch.index.mapper.ParseContext.Document;
|
|
|
import org.elasticsearch.index.mapper.ParsedDocument;
|
|
|
import org.elasticsearch.index.mapper.core.DateFieldMapper;
|
|
|
import org.elasticsearch.index.mapper.core.LongFieldMapper;
|
|
|
import org.elasticsearch.index.mapper.core.StringFieldMapper;
|
|
|
+import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric;
|
|
|
import org.elasticsearch.search.internal.SearchContext;
|
|
|
import org.elasticsearch.test.ElasticsearchSingleNodeTest;
|
|
|
import org.elasticsearch.test.TestSearchContext;
|
|
@@ -55,8 +58,8 @@ import java.util.List;
|
|
|
import java.util.Locale;
|
|
|
import java.util.Map;
|
|
|
|
|
|
-import static org.elasticsearch.index.mapper.string.SimpleStringMappingTests.docValuesType;
|
|
|
import static org.elasticsearch.common.settings.ImmutableSettings.settingsBuilder;
|
|
|
+import static org.elasticsearch.index.mapper.string.SimpleStringMappingTests.docValuesType;
|
|
|
import static org.hamcrest.Matchers.equalTo;
|
|
|
import static org.hamcrest.Matchers.hasKey;
|
|
|
import static org.hamcrest.Matchers.instanceOf;
|
|
@@ -396,4 +399,37 @@ public class SimpleDateMappingTests extends ElasticsearchSingleNodeTest {
|
|
|
assertThat(dateFieldMapperMap.get("field"), is(instanceOf(Map.class)));
|
|
|
return (Map<String, String>) dateFieldMapperMap.get("field");
|
|
|
}
|
|
|
+
|
|
|
+ private static long getDateAsMillis(Document doc, String field) {
|
|
|
+ for (IndexableField f : doc.getFields(field)) {
|
|
|
+ if (f.numericValue() != null) {
|
|
|
+ return f.numericValue().longValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ throw new AssertionError("missing");
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testNumericResolution() throws Exception {
|
|
|
+ String mapping = XContentFactory.jsonBuilder().startObject().startObject("type")
|
|
|
+ .startObject("properties").startObject("date_field").field("type", "date").field("format", "date_time").field("numeric_resolution", "seconds").endObject().endObject()
|
|
|
+ .endObject().endObject().string();
|
|
|
+
|
|
|
+ DocumentMapper defaultMapper = mapper(mapping);
|
|
|
+
|
|
|
+ // provided as an int
|
|
|
+ ParsedDocument doc = defaultMapper.parse("type", "1", XContentFactory.jsonBuilder()
|
|
|
+ .startObject()
|
|
|
+ .field("date_field", 42)
|
|
|
+ .endObject()
|
|
|
+ .bytes());
|
|
|
+ assertThat(getDateAsMillis(doc.rootDoc(), "date_field"), equalTo(42000L));
|
|
|
+
|
|
|
+ // provided as a string
|
|
|
+ doc = defaultMapper.parse("type", "2", XContentFactory.jsonBuilder()
|
|
|
+ .startObject()
|
|
|
+ .field("date_field", "43")
|
|
|
+ .endObject()
|
|
|
+ .bytes());
|
|
|
+ assertThat(getDateAsMillis(doc.rootDoc(), "date_field"), equalTo(43000L));
|
|
|
+ }
|
|
|
}
|