diff --git a/docs/changelog/109948.yaml b/docs/changelog/109948.yaml new file mode 100644 index 0000000000000..3f5a281781bcf --- /dev/null +++ b/docs/changelog/109948.yaml @@ -0,0 +1,5 @@ +pr: 109948 +summary: Automatically adjust `ignore_malformed` only for the @timestamp +area: Mapping +type: bug +issues: [] diff --git a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/mapper/DataStreamTimestampFieldMapperTests.java b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/mapper/DataStreamTimestampFieldMapperTests.java index c8774b18c7e9e..89625ee8a312e 100644 --- a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/mapper/DataStreamTimestampFieldMapperTests.java +++ b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/mapper/DataStreamTimestampFieldMapperTests.java @@ -177,11 +177,29 @@ public void testValidateDefaultIgnoreMalformed() throws Exception { b.startObject("@timestamp"); b.field("type", "date"); b.endObject(); + b.startObject("summary"); + { + b.startObject("properties"); + { + b.startObject("@timestamp"); + b.field("type", "date"); + b.endObject(); + } + b.endObject(); + } + b.endObject(); }) ); assertThat(mapperService, notNullValue()); assertThat(mapperService.documentMapper().mappers().getMapper("@timestamp"), notNullValue()); assertThat(((DateFieldMapper) mapperService.documentMapper().mappers().getMapper("@timestamp")).ignoreMalformed(), is(false)); + DateFieldMapper summaryTimestamp = (DateFieldMapper) (mapperService.documentMapper() + .mappers() + .objectMappers() + .get("summary") + .getMapper("@timestamp")); + assertThat(summaryTimestamp, notNullValue()); + assertThat(summaryTimestamp.ignoreMalformed(), is(true)); } { MapperService mapperService = createMapperService( @@ -193,11 +211,22 @@ public void testValidateDefaultIgnoreMalformed() throws Exception { b.field("type", "date"); b.field("ignore_malformed", false); b.endObject(); + b.startObject("summary.@timestamp"); + b.field("type", "date"); + b.field("ignore_malformed", false); + b.endObject(); }) ); assertThat(mapperService, notNullValue()); assertThat(mapperService.documentMapper().mappers().getMapper("@timestamp"), notNullValue()); assertThat(((DateFieldMapper) mapperService.documentMapper().mappers().getMapper("@timestamp")).ignoreMalformed(), is(false)); + DateFieldMapper summaryTimestamp = (DateFieldMapper) (mapperService.documentMapper() + .mappers() + .objectMappers() + .get("summary") + .getMapper("@timestamp")); + assertThat(summaryTimestamp, notNullValue()); + assertThat(summaryTimestamp.ignoreMalformed(), is(false)); } } } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java index 7c5d217768105..501d31547ded1 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java @@ -359,7 +359,7 @@ public DateFieldMapper build(MapperBuilderContext context) { ); Long nullTimestamp = parseNullValue(ft); - if (leafName().equals(DataStreamTimestampFieldMapper.DEFAULT_PATH) + if (ft.name().equals(DataStreamTimestampFieldMapper.DEFAULT_PATH) && context.isDataStream() && ignoreMalformed.isConfigured() == false) { ignoreMalformed.setValue(false);