5151import org .elasticsearch .index .IndexMode ;
5252import org .elasticsearch .index .IndexSettings ;
5353import org .elasticsearch .index .IndexVersion ;
54+ import org .elasticsearch .index .IndexVersions ;
5455import org .elasticsearch .index .analysis .AnalyzerScope ;
5556import org .elasticsearch .index .analysis .CharFilterFactory ;
5657import org .elasticsearch .index .analysis .CustomAnalyzer ;
@@ -350,6 +351,31 @@ public void testStoreParameterDefaultsSyntheticSourceWithKeywordMultiField() thr
350351 assertThat (fieldType .stored (), is (false ));
351352 }
352353
354+ public void testStoreParameterDefaultsSyntheticSourceWithKeywordMultiFieldBwc () throws IOException {
355+ var indexSettingsBuilder = getIndexSettingsBuilder ();
356+ indexSettingsBuilder .put (IndexSettings .INDEX_MAPPER_SOURCE_MODE_SETTING .getKey (), "synthetic" );
357+ var indexSettings = indexSettingsBuilder .build ();
358+
359+ var mapping = mapping (b -> {
360+ b .startObject ("name" );
361+ b .field ("type" , "text" );
362+ b .startObject ("fields" );
363+ b .startObject ("keyword" );
364+ b .field ("type" , "keyword" );
365+ b .endObject ();
366+ b .endObject ();
367+ b .endObject ();
368+ });
369+ IndexVersion beforeVersion = IndexVersions .INDEX_INT_SORT_INT_TYPE ;
370+ DocumentMapper mapper = createMapperService (beforeVersion , indexSettings , mapping ).documentMapper ();
371+
372+ var source = source (b -> b .field ("name" , "quick brown fox" ));
373+ ParsedDocument doc = mapper .parse (source );
374+ List <IndexableField > fields = doc .rootDoc ().getFields ("name" );
375+ IndexableFieldType fieldType = fields .get (0 ).fieldType ();
376+ assertThat (fieldType .stored (), is (false ));
377+ }
378+
353379 public void testStoreParameterDefaultsSyntheticSourceTextFieldIsMultiField () throws IOException {
354380 var indexSettingsBuilder = getIndexSettingsBuilder ();
355381 indexSettingsBuilder .put (IndexSettings .INDEX_MAPPER_SOURCE_MODE_SETTING .getKey (), "synthetic" );
@@ -374,6 +400,31 @@ public void testStoreParameterDefaultsSyntheticSourceTextFieldIsMultiField() thr
374400 assertThat (fieldType .stored (), is (false ));
375401 }
376402
403+ public void testStoreParameterDefaultsSyntheticSourceTextFieldIsMultiFieldBwc () throws IOException {
404+ var indexSettingsBuilder = getIndexSettingsBuilder ();
405+ indexSettingsBuilder .put (IndexSettings .INDEX_MAPPER_SOURCE_MODE_SETTING .getKey (), "synthetic" );
406+ var indexSettings = indexSettingsBuilder .build ();
407+
408+ var mapping = mapping (b -> {
409+ b .startObject ("name" );
410+ b .field ("type" , "keyword" );
411+ b .startObject ("fields" );
412+ b .startObject ("text" );
413+ b .field ("type" , "text" );
414+ b .endObject ();
415+ b .endObject ();
416+ b .endObject ();
417+ });
418+ IndexVersion beforeVersion = IndexVersions .INDEX_INT_SORT_INT_TYPE ;
419+ DocumentMapper mapper = createMapperService (beforeVersion , indexSettings , mapping ).documentMapper ();
420+
421+ var source = source (b -> b .field ("name" , "quick brown fox" ));
422+ ParsedDocument doc = mapper .parse (source );
423+ List <IndexableField > fields = doc .rootDoc ().getFields ("name.text" );
424+ IndexableFieldType fieldType = fields .get (0 ).fieldType ();
425+ assertThat (fieldType .stored (), is (true ));
426+ }
427+
377428 public void testBWCSerialization () throws IOException {
378429 MapperService mapperService = createMapperService (fieldMapping (b -> {
379430 b .field ("type" , "text" );
0 commit comments