diff --git a/server/src/main/java/org/opensearch/index/mapper/FieldMapper.java b/server/src/main/java/org/opensearch/index/mapper/FieldMapper.java index ff275a164f7ce..553eff0e03cf9 100644 --- a/server/src/main/java/org/opensearch/index/mapper/FieldMapper.java +++ b/server/src/main/java/org/opensearch/index/mapper/FieldMapper.java @@ -802,6 +802,7 @@ public MultiFields build(Mapper.Builder mainFieldBuilder, BuilderContext context return empty(); } else { context.path().add(mainFieldBuilder.name()); + context.setMultiField(true); Map mapperBuilders = this.mapperBuilders; for (final Map.Entry cursor : this.mapperBuilders.entrySet()) { String key = cursor.getKey(); @@ -810,6 +811,7 @@ public MultiFields build(Mapper.Builder mainFieldBuilder, BuilderContext context assert mapper instanceof FieldMapper; mapperBuilders.put(key, mapper); } + context.setMultiField(false); context.path().remove(); final Map mappers = (Map) mapperBuilders; return new MultiFields(mappers); diff --git a/server/src/main/java/org/opensearch/index/mapper/Mapper.java b/server/src/main/java/org/opensearch/index/mapper/Mapper.java index cc19bb86d689d..9b5b686f7dc24 100644 --- a/server/src/main/java/org/opensearch/index/mapper/Mapper.java +++ b/server/src/main/java/org/opensearch/index/mapper/Mapper.java @@ -96,6 +96,16 @@ public Settings indexSettings() { return this.indexSettings; } + private boolean multiField = false; + + public boolean isMultiField() { + return multiField; + } + + public void setMultiField(boolean multiField) { + this.multiField = multiField; + } + public void assignCapabilities(MappedFieldType fieldType) { if (capabilityAssigner != null) { capabilityAssigner.accept(fieldType); diff --git a/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java b/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java index 12223cda20de3..47275015c28ad 100644 --- a/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java +++ b/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java @@ -473,8 +473,9 @@ protected PhraseFieldMapper buildPhraseMapper(FieldType fieldType, TextFieldType public TextFieldMapper build(BuilderContext context) { FieldType fieldType = TextParams.buildFieldType(index, store, indexOptions, norms, termVectors); TextFieldType tft = buildFieldType(fieldType, context); - if (context.indexSettings().getAsBoolean(IndexSettings.INDEX_DERIVED_SOURCE_SETTING.getKey(), false) - || context.indexSettings().getAsBoolean(IndexSettings.PLUGGABLE_DATAFORMAT_ENABLED_SETTING.getKey(), false)) { + if ((context.indexSettings().getAsBoolean(IndexSettings.INDEX_DERIVED_SOURCE_SETTING.getKey(), false) + || context.indexSettings().getAsBoolean(IndexSettings.PLUGGABLE_DATAFORMAT_ENABLED_SETTING.getKey(), false)) + && !context.isMultiField()) { fieldType.setStored(true); } return new TextFieldMapper(