mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-17 18:35:25 +00:00
Merging complex objects / types (geo, objects) can cause failure to lookup field names (without type prefix), closes #1016.
This commit is contained in:
parent
3e1e58e394
commit
eca244054f
@ -28,7 +28,6 @@ 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.core.AbstractFieldMapper;
|
||||
import org.elasticsearch.index.mapper.internal.AllFieldMapper;
|
||||
import org.elasticsearch.index.mapper.multifield.MultiFieldMapper;
|
||||
|
||||
@ -556,7 +555,7 @@ public class ObjectMapper implements Mapper, AllFieldMapper.IncludeInAll {
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void merge(Mapper mergeWith, MergeContext mergeContext) throws MergeMappingException {
|
||||
@Override public void merge(final Mapper 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;
|
||||
@ -572,9 +571,11 @@ public class ObjectMapper implements Mapper, AllFieldMapper.IncludeInAll {
|
||||
// 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)) {
|
||||
@ -584,9 +585,11 @@ public class ObjectMapper implements Mapper, AllFieldMapper.IncludeInAll {
|
||||
putMapper(mergeWithMultiField);
|
||||
// now, raise events for all mappers
|
||||
for (Mapper 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 {
|
||||
|
@ -44,11 +44,13 @@ public class Test1MergeMapperTests {
|
||||
assertThat(mergeResult.hasConflicts(), equalTo(false));
|
||||
// since we are simulating, we should not have the age mapping
|
||||
assertThat(stage1.mappers().smartName("age"), nullValue());
|
||||
assertThat(stage1.mappers().smartName("obj1.prop1"), nullValue());
|
||||
// now merge, don't simulate
|
||||
mergeResult = stage1.merge(stage2, mergeFlags().simulate(false));
|
||||
// there is still merge failures
|
||||
assertThat(mergeResult.hasConflicts(), equalTo(false));
|
||||
// but we have the age in
|
||||
assertThat(stage1.mappers().smartName("age"), notNullValue());
|
||||
assertThat(stage1.mappers().smartName("obj1.prop1"), notNullValue());
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
person : {
|
||||
properties : {
|
||||
name : {
|
||||
type : "string"
|
||||
"person" : {
|
||||
"properties" : {
|
||||
"name" : {
|
||||
"type" : "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,18 @@
|
||||
{
|
||||
person : {
|
||||
properties : {
|
||||
name : {
|
||||
type : "string"
|
||||
"person" : {
|
||||
"properties" : {
|
||||
"name" : {
|
||||
"type" : "string"
|
||||
},
|
||||
age : {
|
||||
type : "integer"
|
||||
"age" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"obj1" : {
|
||||
"properties" : {
|
||||
"prop1" : {
|
||||
"type" : "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user