From 70277100f8a06ccca80ec58222c4b9b41a85b500 Mon Sep 17 00:00:00 2001 From: Albert Zaharovits Date: Mon, 3 Nov 2025 18:19:11 +0200 Subject: [PATCH 1/2] Expose field mapper type for timestamp field --- .../index/mapper/MappingLookup.java | 18 +++++++++--------- .../elasticsearch/index/shard/IndexShard.java | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/MappingLookup.java b/server/src/main/java/org/elasticsearch/index/mapper/MappingLookup.java index e36c9de0530b4..897d548a9fb11 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/MappingLookup.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/MappingLookup.java @@ -15,6 +15,7 @@ import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.analysis.IndexAnalyzers; import org.elasticsearch.index.analysis.NamedAnalyzer; +import org.elasticsearch.index.mapper.DateFieldMapper.DateFieldType; import org.elasticsearch.inference.InferenceService; import org.elasticsearch.search.lookup.SourceFilter; @@ -530,19 +531,18 @@ public boolean isDataStreamTimestampFieldEnabled() { } /** - * Returns if this mapping contains a timestamp field that is of type date, has doc values, and is either indexed or uses a doc values - * skipper. - * @return {@code true} if contains a timestamp field of type date that has doc values and is either indexed or uses a doc values - * skipper, {@code false} otherwise. + * If this mapping contains a timestamp field that is of type date, has doc values, and is either indexed or uses a doc values + * skipper, this returns the field type for it. */ - public boolean hasTimestampField() { + public DateFieldType getTimestampFieldType() { final MappedFieldType mappedFieldType = fieldTypesLookup().get(DataStream.TIMESTAMP_FIELD_NAME); - if (mappedFieldType instanceof DateFieldMapper.DateFieldType dateMappedFieldType) { + if (mappedFieldType instanceof DateFieldType dateMappedFieldType) { IndexType indexType = dateMappedFieldType.indexType(); - return indexType.hasPoints() || indexType.hasDocValuesSkipper(); - } else { - return false; + if (indexType.hasPoints() || indexType.hasDocValuesSkipper()) { + return dateMappedFieldType; + } } + return null; } /** diff --git a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java index 6617f8fa8340e..6a4dbfc92ee4d 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java +++ b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java @@ -3842,7 +3842,7 @@ private EngineConfig newEngineConfig(LongSupplier globalCheckpointSupplier) { this.warmer.warm(reader); } }; - final boolean isTimeBasedIndex = mapperService == null ? false : mapperService.mappingLookup().hasTimestampField(); + final boolean isTimeBasedIndex = mapperService == null ? false : mapperService.mappingLookup().getTimestampFieldType() != null; return new EngineConfig( shardId, threadPool, From 14a7f673990218ecef2bf595d8c5d347d2e1d40e Mon Sep 17 00:00:00 2001 From: Albert Zaharovits Date: Mon, 3 Nov 2025 18:36:05 +0200 Subject: [PATCH 2/2] Mark as nullable --- .../main/java/org/elasticsearch/index/mapper/MappingLookup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/MappingLookup.java b/server/src/main/java/org/elasticsearch/index/mapper/MappingLookup.java index 897d548a9fb11..9b711678d6c44 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/MappingLookup.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/MappingLookup.java @@ -534,7 +534,7 @@ public boolean isDataStreamTimestampFieldEnabled() { * If this mapping contains a timestamp field that is of type date, has doc values, and is either indexed or uses a doc values * skipper, this returns the field type for it. */ - public DateFieldType getTimestampFieldType() { + public @Nullable DateFieldType getTimestampFieldType() { final MappedFieldType mappedFieldType = fieldTypesLookup().get(DataStream.TIMESTAMP_FIELD_NAME); if (mappedFieldType instanceof DateFieldType dateMappedFieldType) { IndexType indexType = dateMappedFieldType.indexType();