Skip to content

Commit d9e85ea

Browse files
committed
Merging complex objects / types (geo, objects) can cause failure to lookup field names (without type prefix), closes elastic#1016.
1 parent d39a57f commit d9e85ea

File tree

1 file changed

+17
-8
lines changed
  • modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent

1 file changed

+17
-8
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/ObjectMapper.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@
2727
import org.elasticsearch.common.xcontent.ToXContent;
2828
import org.elasticsearch.common.xcontent.XContentBuilder;
2929
import org.elasticsearch.common.xcontent.XContentParser;
30-
import org.elasticsearch.index.mapper.*;
30+
import org.elasticsearch.index.mapper.FieldMapper;
31+
import org.elasticsearch.index.mapper.FieldMapperListener;
32+
import org.elasticsearch.index.mapper.InternalMapper;
33+
import org.elasticsearch.index.mapper.MapperParsingException;
34+
import org.elasticsearch.index.mapper.MergeMappingException;
35+
import org.elasticsearch.index.mapper.StrictDynamicMappingException;
3136

3237
import java.io.IOException;
3338
import java.util.HashMap;
@@ -553,7 +558,7 @@ private void serializeValue(final ParseContext context, String currentFieldName,
553558
}
554559
}
555560

556-
@Override public void merge(XContentMapper mergeWith, MergeContext mergeContext) throws MergeMappingException {
561+
@Override public void merge(final XContentMapper mergeWith, final MergeContext mergeContext) throws MergeMappingException {
557562
if (!(mergeWith instanceof ObjectMapper)) {
558563
mergeContext.addConflict("Can't merge a non object mapping [" + mergeWith.name() + "] with an object mapping [" + name() + "]");
559564
return;
@@ -569,9 +574,11 @@ private void serializeValue(final ParseContext context, String currentFieldName,
569574
// no mapping, simply add it if not simulating
570575
if (!mergeContext.mergeFlags().simulate()) {
571576
putMapper(mergeWithMapper);
572-
if (mergeWithMapper instanceof AbstractFieldMapper) {
573-
mergeContext.docMapper().addFieldMapper((FieldMapper) mergeWithMapper);
574-
}
577+
mergeWithMapper.traverse(new FieldMapperListener() {
578+
@Override public void fieldMapper(FieldMapper fieldMapper) {
579+
mergeContext.docMapper().addFieldMapper(fieldMapper);
580+
}
581+
});
575582
}
576583
} else {
577584
if ((mergeWithMapper instanceof MultiFieldMapper) && !(mergeIntoMapper instanceof MultiFieldMapper)) {
@@ -581,9 +588,11 @@ private void serializeValue(final ParseContext context, String currentFieldName,
581588
putMapper(mergeWithMultiField);
582589
// now, raise events for all mappers
583590
for (XContentMapper mapper : mergeWithMultiField.mappers().values()) {
584-
if (mapper instanceof AbstractFieldMapper) {
585-
mergeContext.docMapper().addFieldMapper((FieldMapper) mapper);
586-
}
591+
mapper.traverse(new FieldMapperListener() {
592+
@Override public void fieldMapper(FieldMapper fieldMapper) {
593+
mergeContext.docMapper().addFieldMapper(fieldMapper);
594+
}
595+
});
587596
}
588597
}
589598
} else {

0 commit comments

Comments
 (0)