Skip to content

Commit

Permalink
Merging complex objects / types (geo, objects) can cause failure to l…
Browse files Browse the repository at this point in the history
…ookup field names (without type prefix), closes elastic#1016.
  • Loading branch information
kimchy committed Jun 10, 2011
1 parent b3503f5 commit 7206b2b
Showing 1 changed file with 17 additions and 8 deletions.
Expand Up @@ -27,7 +27,12 @@
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.index.mapper.*;
import org.elasticsearch.index.mapper.FieldMapper;
import org.elasticsearch.index.mapper.FieldMapperListener;
import org.elasticsearch.index.mapper.InternalMapper;
import org.elasticsearch.index.mapper.MapperParsingException;
import org.elasticsearch.index.mapper.MergeMappingException;
import org.elasticsearch.index.mapper.StrictDynamicMappingException;

import java.io.IOException;
import java.util.HashMap;
Expand Down Expand Up @@ -553,7 +558,7 @@ private void serializeValue(final ParseContext context, String currentFieldName,
}
}

@Override public void merge(XContentMapper mergeWith, MergeContext mergeContext) throws MergeMappingException {
@Override public void merge(final XContentMapper mergeWith, final MergeContext mergeContext) throws MergeMappingException {
if (!(mergeWith instanceof ObjectMapper)) {
mergeContext.addConflict("Can't merge a non object mapping [" + mergeWith.name() + "] with an object mapping [" + name() + "]");
return;
Expand All @@ -569,9 +574,11 @@ private void serializeValue(final ParseContext context, String currentFieldName,
// no mapping, simply add it if not simulating
if (!mergeContext.mergeFlags().simulate()) {
putMapper(mergeWithMapper);
if (mergeWithMapper instanceof AbstractFieldMapper) {
mergeContext.docMapper().addFieldMapper((FieldMapper) mergeWithMapper);
}
mergeWithMapper.traverse(new FieldMapperListener() {
@Override public void fieldMapper(FieldMapper fieldMapper) {
mergeContext.docMapper().addFieldMapper(fieldMapper);
}
});
}
} else {
if ((mergeWithMapper instanceof MultiFieldMapper) && !(mergeIntoMapper instanceof MultiFieldMapper)) {
Expand All @@ -581,9 +588,11 @@ private void serializeValue(final ParseContext context, String currentFieldName,
putMapper(mergeWithMultiField);
// now, raise events for all mappers
for (XContentMapper mapper : mergeWithMultiField.mappers().values()) {
if (mapper instanceof AbstractFieldMapper) {
mergeContext.docMapper().addFieldMapper((FieldMapper) mapper);
}
mapper.traverse(new FieldMapperListener() {
@Override public void fieldMapper(FieldMapper fieldMapper) {
mergeContext.docMapper().addFieldMapper(fieldMapper);
}
});
}
}
} else {
Expand Down

0 comments on commit 7206b2b

Please sign in to comment.