From 2be27593d6e3a49146e92c0211c5a4b620e1f84c Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Tue, 22 Feb 2022 21:05:51 +0100 Subject: [PATCH] MappingBuilder must set configured date formats for date_range fields. Original Pull Request #2103 Closes #2102 (cherry picked from commit bf080002bc60aaf63d27d1569833a2ae0374a161) --- .../core/index/MappingParameters.java | 2 +- .../core/index/MappingBuilderUnitTests.java | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java b/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java index c2f196df7..324dbe4be 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java @@ -239,7 +239,7 @@ public final class MappingParameters { if (type != FieldType.Auto) { objectNode.put(FIELD_PARAM_TYPE, type.getMappedName()); - if (type == FieldType.Date) { + if (type == FieldType.Date || type == FieldType.Date_Nanos || type == FieldType.Date_Range) { List formats = new ArrayList<>(); // built-in formats diff --git a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderUnitTests.java b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderUnitTests.java index 90936e0e8..66318b60a 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderUnitTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderUnitTests.java @@ -42,6 +42,7 @@ import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.springframework.data.elasticsearch.annotations.*; import org.springframework.data.elasticsearch.core.MappingContextBaseTests; +import org.springframework.data.elasticsearch.core.Range; import org.springframework.data.elasticsearch.core.geo.GeoPoint; import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext; import org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm; @@ -721,6 +722,29 @@ public class MappingBuilderUnitTests extends MappingContextBaseTests { assertEquals(expected, mapping, false); } + @Test // #2102 + @DisplayName("should write date formats for date range fields") + void shouldWriteDateFormatsForDateRangeFields() throws JSONException { + + String expected = "{\n" + // + " \"properties\": {\n" + // + " \"_class\": {\n" + // + " \"type\": \"keyword\",\n" + // + " \"index\": false,\n" + // + " \"doc_values\": false\n" + // + " },\n" + // + " \"field2\": {\n" + // + " \"type\": \"date_range\",\n" + // + " \"format\": \"date\"\n" + // + " }\n" + // + " }\n" + // + "}\n"; // + + String mapping = getMappingBuilder().buildPropertyMapping(DateRangeEntity.class); + + assertEquals(expected, mapping, false); + } + @Test // #1454 @DisplayName("should write type hints when context is configured to do so") void shouldWriteTypeHintsWhenContextIsConfiguredToDoSo() throws JSONException { @@ -1911,6 +1935,31 @@ public class MappingBuilderUnitTests extends MappingContextBaseTests { } } + private static class DateRangeEntity { + @Nullable + @Id private String id; + @Nullable + @Field(type = Date_Range, format = DateFormat.date) private Range field2; + + @Nullable + public String getId() { + return id; + } + + public void setId(@Nullable String id) { + this.id = id; + } + + @Nullable + public Range getField2() { + return field2; + } + + public void setField2(@Nullable Range field2) { + this.field2 = field2; + } + } + @Document(indexName = "magazine") private static class Magazine { @Id @Nullable private String id;