diff --git a/src/main/java/org/elasticsearch/index/mapper/MergeContext.java b/src/main/java/org/elasticsearch/index/mapper/MergeContext.java index 70ce553048e..72d9565432b 100644 --- a/src/main/java/org/elasticsearch/index/mapper/MergeContext.java +++ b/src/main/java/org/elasticsearch/index/mapper/MergeContext.java @@ -21,6 +21,8 @@ package org.elasticsearch.index.mapper; import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -35,6 +37,8 @@ public class MergeContext { private final FieldMapperListener.Aggregator newFieldMappers = new FieldMapperListener.Aggregator(); private final ObjectMapperListener.Aggregator newObjectMappers = new ObjectMapperListener.Aggregator(); + private List fieldDataChanges = null; + public MergeContext(DocumentMapper documentMapper, DocumentMapper.MergeFlags mergeFlags) { this.documentMapper = documentMapper; this.mergeFlags = mergeFlags; @@ -67,4 +71,18 @@ public class MergeContext { public String[] buildConflicts() { return mergeConflicts.toArray(new String[mergeConflicts.size()]); } + + public void addFieldDataChange(FieldMapper mapper) { + if (fieldDataChanges == null) { + fieldDataChanges = new ArrayList(); + } + fieldDataChanges.add(mapper); + } + + public List fieldMapperChanges() { + if (fieldDataChanges == null) { + return Collections.emptyList(); + } + return fieldDataChanges; + } } diff --git a/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java b/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java index 5223f777b3e..afad2f9d1f6 100644 --- a/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java +++ b/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java @@ -19,6 +19,7 @@ package org.elasticsearch.index.mapper.core; +import com.google.common.base.Objects; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Field; import org.apache.lucene.document.FieldType; @@ -583,10 +584,13 @@ public abstract class AbstractFieldMapper implements FieldMapper, Mapper { this.postingsFormat = fieldMergeWith.postingsFormat; } if (fieldMergeWith.customFieldDataSettings != null) { - this.customFieldDataSettings = fieldMergeWith.customFieldDataSettings; - this.fieldDataType = new FieldDataType(defaultFieldDataType().getType(), - ImmutableSettings.builder().put(defaultFieldDataType().getSettings()).put(this.customFieldDataSettings) - ); + if (!Objects.equal(fieldMergeWith.customFieldDataSettings, this.customFieldDataSettings)) { + this.customFieldDataSettings = fieldMergeWith.customFieldDataSettings; + this.fieldDataType = new FieldDataType(defaultFieldDataType().getType(), + ImmutableSettings.builder().put(defaultFieldDataType().getSettings()).put(this.customFieldDataSettings) + ); + mergeContext.addFieldDataChange(this); + } } } }