@@ -101,20 +101,7 @@ public static class Builder extends MetadataFieldMapper.Builder {
101101 (previous , current , conflicts ) -> (previous .value () == current .value ()) || (previous .value () && current .value () == false )
102102 );
103103
104- /*
105- * The default mode for TimeSeries is left empty on purpose, so that mapping printings include the synthetic
106- * source mode.
107- */
108- private final Parameter <Mode > mode = new Parameter <>(
109- "mode" ,
110- true ,
111- () -> null ,
112- (n , c , o ) -> Mode .valueOf (o .toString ().toUpperCase (Locale .ROOT )),
113- m -> toType (m ).enabled .explicit () ? null : toType (m ).mode ,
114- (b , n , v ) -> b .field (n , v .toString ().toLowerCase (Locale .ROOT )),
115- v -> v .toString ().toLowerCase (Locale .ROOT )
116- ).setMergeValidator ((previous , current , conflicts ) -> (previous == current ) || current != Mode .STORED )
117- .setSerializerCheck ((includeDefaults , isConfigured , value ) -> value != null ); // don't emit if `enabled` is configured
104+ private final Parameter <Mode > mode ;
118105 private final Parameter <List <String >> includes = Parameter .stringArrayParam (
119106 "includes" ,
120107 false ,
@@ -128,9 +115,22 @@ public static class Builder extends MetadataFieldMapper.Builder {
128115
129116 private final IndexMode indexMode ;
130117
131- public Builder (IndexMode indexMode ) {
118+ public Builder (IndexMode indexMode , IndexVersion indexVersion ) {
132119 super (Defaults .NAME );
133120 this .indexMode = indexMode ;
121+ this .mode = new Parameter <>(
122+ "mode" ,
123+ true ,
124+ // The default mode for TimeSeries is left empty on purpose, so that mapping printings include the synthetic source mode.
125+ () -> getIndexMode () == IndexMode .TIME_SERIES && indexVersion .between (IndexVersion .V_8_7_0 , IndexVersion .V_8_10_0 )
126+ ? Mode .SYNTHETIC
127+ : null ,
128+ (n , c , o ) -> Mode .valueOf (o .toString ().toUpperCase (Locale .ROOT )),
129+ m -> toType (m ).enabled .explicit () ? null : toType (m ).mode ,
130+ (b , n , v ) -> b .field (n , v .toString ().toLowerCase (Locale .ROOT )),
131+ v -> v .toString ().toLowerCase (Locale .ROOT )
132+ ).setMergeValidator ((previous , current , conflicts ) -> (previous == current ) || current != Mode .STORED )
133+ .setSerializerCheck ((includeDefaults , isConfigured , value ) -> value != null ); // don't emit if `enabled` is configured
134134 }
135135
136136 public Builder setSynthetic () {
@@ -188,7 +188,7 @@ private IndexMode getIndexMode() {
188188 c -> c .getIndexSettings ().getMode () == IndexMode .TIME_SERIES
189189 ? c .getIndexSettings ().getIndexVersionCreated ().onOrAfter (IndexVersion .V_8_7_0 ) ? TSDB_DEFAULT : TSDB_LEGACY_DEFAULT
190190 : DEFAULT ,
191- c -> new Builder (c .getIndexSettings ().getMode ())
191+ c -> new Builder (c .getIndexSettings ().getMode (), c . getIndexSettings (). getIndexVersionCreated () )
192192 );
193193
194194 static final class SourceFieldType extends MappedFieldType {
@@ -313,7 +313,7 @@ protected String contentType() {
313313
314314 @ Override
315315 public FieldMapper .Builder getMergeBuilder () {
316- return new Builder (indexMode ).init (this );
316+ return new Builder (indexMode , IndexVersion . current () ).init (this );
317317 }
318318
319319 /**
0 commit comments