diff --git a/core/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java index de201941ed7f7..1a847997e8429 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java @@ -399,10 +399,10 @@ public boolean isParent(String type) { return mapperService.getParentTypes().contains(type); } - private void addMappers(Collection objectMappers, Collection fieldMappers) { + private void addMappers(Collection objectMappers, Collection fieldMappers, boolean updateAllTypes) { assert mappingLock.isWriteLockedByCurrentThread(); // first ensure we don't have any incompatible new fields - mapperService.checkNewMappersCompatibility(objectMappers, fieldMappers, true); + mapperService.checkNewMappersCompatibility(objectMappers, fieldMappers, updateAllTypes); // update mappers for this document type MapBuilder builder = MapBuilder.newMapBuilder(this.objectMappers); @@ -424,7 +424,7 @@ public MergeResult merge(Mapping mapping, boolean simulate, boolean updateAllTyp final MergeResult mergeResult = new MergeResult(simulate, updateAllTypes); this.mapping.merge(mapping, mergeResult); if (simulate == false) { - addMappers(mergeResult.getNewObjectMappers(), mergeResult.getNewFieldMappers()); + addMappers(mergeResult.getNewObjectMappers(), mergeResult.getNewFieldMappers(), updateAllTypes); refreshSource(); } return mergeResult; diff --git a/core/src/main/java/org/elasticsearch/index/mapper/object/ObjectMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/object/ObjectMapper.java index 12f0319f32a57..30592f4e9fe23 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/object/ObjectMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/object/ObjectMapper.java @@ -278,7 +278,10 @@ protected static void parseProperties(ObjectMapper.Builder objBuilder, Map> iterator = propsNode.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); - String propName = entry.getKey(); + String fieldName = entry.getKey(); + if (fieldName.contains(".")) { + throw new MapperParsingException("Field name [" + fieldName + "] cannot contain '.'"); + } // Should accept empty arrays, as a work around for when the // user can't provide an empty Map. (PHP for example) boolean isEmptyList = entry.getValue() instanceof List && ((List) entry.getValue()).isEmpty(); @@ -301,23 +304,23 @@ protected static void parseProperties(ObjectMapper.Builder objBuilder, Map