From 16fd68b0554ec6a1bdc8f9489c6048fff17ad8c0 Mon Sep 17 00:00:00 2001 From: gmarouli Date: Wed, 19 Nov 2025 18:08:18 +0200 Subject: [PATCH 1/2] Do not accept mappings that (eventually) set dimension and metric in the same field --- .../index/mapper/NumberFieldMapper.java | 11 +++++++++++ .../mapper/PassThroughObjectMapperTests.java | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java index 2820ae2cd56f0..65d3390309338 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java @@ -2316,6 +2316,17 @@ public void doValidate(MappingLookup lookup) { TimeSeriesParams.TIME_SERIES_DIMENSION_PARAM + " can't be configured in nested field [" + fullPath() + "]" ); } + if (dimension && metricType != null) { + throw new IllegalArgumentException( + "[" + + TimeSeriesParams.TIME_SERIES_DIMENSION_PARAM + + "] and [" + + TimeSeriesParams.TIME_SERIES_METRIC_PARAM + + "] cannot be set in conjunction with each other [" + + fullPath() + + "]" + ); + } } private SourceLoader.SyntheticFieldLoader docValuesSyntheticFieldLoader() { diff --git a/server/src/test/java/org/elasticsearch/index/mapper/PassThroughObjectMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/PassThroughObjectMapperTests.java index c6764c34a1abb..0edcbeccff8eb 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/PassThroughObjectMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/PassThroughObjectMapperTests.java @@ -265,4 +265,20 @@ public void testCheckForDuplicatePrioritiesManyElementsDuplicatePriority() throw ); assertThat(e.getMessage(), containsString("Pass-through object [bar] has a conflicting param [priority=1] with object [foo]")); } + + public void testTimeSeriesDimensionAndMetricConflict() throws IOException { + IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> createMapperService(mapping(b -> { + b.startObject("labels").field("type", "passthrough").field("priority", "0").field("time_series_dimension", "true"); + { + b.startObject("properties"); + b.startObject("dim").field("type", "long").field("time_series_metric", "counter").endObject(); + b.endObject(); + } + b.endObject(); + }))); + assertThat( + e.getMessage(), + containsString("[time_series_dimension] and [time_series_metric] cannot be set in conjunction with each other [labels.dim]") + ); + } } From baed25132c259064ce2493dfb4eb42ac4c45e2e0 Mon Sep 17 00:00:00 2001 From: Mary Gouseti Date: Wed, 19 Nov 2025 18:13:49 +0200 Subject: [PATCH 2/2] Update docs/changelog/138308.yaml --- docs/changelog/138308.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/changelog/138308.yaml diff --git a/docs/changelog/138308.yaml b/docs/changelog/138308.yaml new file mode 100644 index 0000000000000..40243ca2659c6 --- /dev/null +++ b/docs/changelog/138308.yaml @@ -0,0 +1,5 @@ +pr: 138308 +summary: Reject mappings that (eventually) set dimension and metric in the same field +area: Mapping +type: bug +issues: []