summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java34
-rw-r--r--modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ChildrenIT.java31
-rw-r--r--modules/parent-join/src/test/java/org/elasticsearch/join/fetch/ParentJoinFieldSubFetchPhaseTests.java8
-rw-r--r--modules/parent-join/src/test/java/org/elasticsearch/join/mapper/ParentJoinFieldMapperTests.java96
-rw-r--r--modules/parent-join/src/test/java/org/elasticsearch/join/query/ChildQuerySearchIT.java99
-rw-r--r--modules/parent-join/src/test/java/org/elasticsearch/join/query/HasChildQueryBuilderTests.java50
-rw-r--r--modules/parent-join/src/test/java/org/elasticsearch/join/query/HasParentQueryBuilderTests.java43
-rw-r--r--modules/parent-join/src/test/java/org/elasticsearch/join/query/InnerHitsIT.java54
-rw-r--r--modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentChildTestCase.java33
-rw-r--r--modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentIdQueryBuilderTests.java43
-rw-r--r--modules/parent-join/src/test/resources/rest-api-spec/test/11_parent_child.yml7
-rw-r--r--modules/parent-join/src/test/resources/rest-api-spec/test/20_parent_join.yml6
12 files changed, 353 insertions, 151 deletions
diff --git a/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java b/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java
index ecabbb096e..b5408d2123 100644
--- a/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java
+++ b/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java
@@ -28,6 +28,7 @@ import org.elasticsearch.common.lucene.Lucene;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentParser;
+import org.elasticsearch.common.xcontent.XContentParserUtils;
import org.elasticsearch.common.xcontent.support.XContentMapValues;
import org.elasticsearch.index.IndexSettings;
import org.elasticsearch.index.fielddata.IndexFieldData;
@@ -162,7 +163,7 @@ public final class ParentJoinFieldMapper extends FieldMapper {
checkParentFields(name(), parentIdFields);
MetaJoinFieldMapper unique = new MetaJoinFieldMapper.Builder().build(context);
return new ParentJoinFieldMapper(name, fieldType, context.indexSettings(),
- unique, Collections.unmodifiableList(parentIdFields));
+ unique, Collections.unmodifiableList(parentIdFields), eagerGlobalOrdinals);
}
}
@@ -183,15 +184,21 @@ public final class ParentJoinFieldMapper extends FieldMapper {
iterator.remove();
continue;
}
- final String parent = entry.getKey();
- Set<String> children;
- if (XContentMapValues.isArray(entry.getValue())) {
- children = new HashSet<>(Arrays.asList(XContentMapValues.nodeStringArrayValue(entry.getValue())));
- } else {
- children = Collections.singleton(entry.getValue().toString());
+ if ("relations".equals(entry.getKey())) {
+ Map<String, Object> relations = XContentMapValues.nodeMapValue(entry.getValue(), "relations");
+ for (Iterator<Map.Entry<String, Object>> relIt = relations.entrySet().iterator(); relIt.hasNext(); ) {
+ Map.Entry<String, Object> relation = relIt.next();
+ final String parent = relation.getKey();
+ Set<String> children;
+ if (XContentMapValues.isArray(relation.getValue())) {
+ children = new HashSet<>(Arrays.asList(XContentMapValues.nodeStringArrayValue(relation.getValue())));
+ } else {
+ children = Collections.singleton(relation.getValue().toString());
+ }
+ builder.addParent(parent, children);
+ }
+ iterator.remove();
}
- builder.addParent(parent, children);
- iterator.remove();
}
return builder;
}
@@ -235,16 +242,19 @@ public final class ParentJoinFieldMapper extends FieldMapper {
// The meta field that ensures that there is no other parent-join in the mapping
private MetaJoinFieldMapper uniqueFieldMapper;
private List<ParentIdFieldMapper> parentIdFields;
+ private boolean eagerGlobalOrdinals;
protected ParentJoinFieldMapper(String simpleName,
MappedFieldType fieldType,
Settings indexSettings,
MetaJoinFieldMapper uniqueFieldMapper,
- List<ParentIdFieldMapper> parentIdFields) {
+ List<ParentIdFieldMapper> parentIdFields,
+ boolean eagerGlobalOrdinals) {
super(simpleName, fieldType, Defaults.FIELD_TYPE, indexSettings, MultiFields.empty(), null);
this.parentIdFields = parentIdFields;
this.uniqueFieldMapper = uniqueFieldMapper;
this.uniqueFieldMapper.setFieldMapper(this);
+ this.eagerGlobalOrdinals = eagerGlobalOrdinals;
}
@Override
@@ -337,6 +347,7 @@ public final class ParentJoinFieldMapper extends FieldMapper {
if (conflicts.isEmpty() == false) {
throw new IllegalStateException("invalid update for join field [" + name() + "]:\n" + conflicts.toString());
}
+ this.eagerGlobalOrdinals = joinMergeWith.eagerGlobalOrdinals;
this.parentIdFields = Collections.unmodifiableList(newParentIdFields);
this.uniqueFieldMapper = (MetaJoinFieldMapper) uniqueFieldMapper.merge(joinMergeWith.uniqueFieldMapper, updateAllTypes);
uniqueFieldMapper.setFieldMapper(this);
@@ -423,6 +434,8 @@ public final class ParentJoinFieldMapper extends FieldMapper {
@Override
protected void doXContentBody(XContentBuilder builder, boolean includeDefaults, Params params) throws IOException {
builder.field("type", contentType());
+ builder.field("eager_global_ordinals", eagerGlobalOrdinals);
+ builder.startObject("relations");
for (ParentIdFieldMapper field : parentIdFields) {
if (field.getChildren().size() == 1) {
builder.field(field.getParentName(), field.getChildren().iterator().next());
@@ -430,6 +443,7 @@ public final class ParentJoinFieldMapper extends FieldMapper {
builder.field(field.getParentName(), field.getChildren());
}
}
+ builder.endObject();
}
}
diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ChildrenIT.java b/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ChildrenIT.java
index 59467d49c8..00b2714e4f 100644
--- a/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ChildrenIT.java
+++ b/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ChildrenIT.java
@@ -73,8 +73,9 @@ public class ChildrenIT extends ParentChildTestCase {
} else {
assertAcked(
prepareCreate("test")
- .addMapping("doc", "category", "type=keyword", "join_field", "type=join,article=comment",
- "commenter", "type=keyword")
+ .addMapping("doc",
+ addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "article", "comment"),
+ "commenter", "keyword", "category", "keyword"))
);
}
@@ -248,7 +249,9 @@ public class ChildrenIT extends ParentChildTestCase {
} else {
assertAcked(
prepareCreate(indexName)
- .addMapping("doc", "join_field", "type=join,parent=child", "count", "type=long")
+ .addMapping("doc",
+ addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"),
+ "name", "keyword"))
);
}
@@ -325,10 +328,12 @@ public class ChildrenIT extends ParentChildTestCase {
} else {
assertAcked(
prepareCreate(indexName)
- .setSettings(Settings.builder().put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1)
- .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0))
- .addMapping("doc", "join_field", "type=join," + masterType + "=" + childType, "brand", "type=text",
- "name", "type=keyword", "material", "type=text", "color", "type=keyword", "size", "type=keyword")
+ .setSettings(Settings.builder().put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1)
+ .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0))
+ .addMapping("doc",
+ addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true,
+ masterType, childType),
+ "brand", "text", "name", "keyword", "material", "text", "color", "keyword", "size", "keyword"))
);
}
@@ -400,8 +405,10 @@ public class ChildrenIT extends ParentChildTestCase {
} else {
assertAcked(
prepareCreate(indexName)
- .addMapping("doc", "join_field", "type=join," + grandParentType + "=" + parentType + "," +
- parentType + "=" + childType, "name", "type=keyword")
+ .addMapping("doc",
+ addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true,
+ grandParentType, parentType, parentType, childType),
+ "name", "keyword"))
);
}
@@ -449,8 +456,10 @@ public class ChildrenIT extends ParentChildTestCase {
} else {
assertAcked(
prepareCreate("index")
- .addMapping("doc", "join_field", "type=join,parentType=childType", "name", "type=keyword",
- "town", "type=keyword", "age", "type=integer")
+ .addMapping("doc",
+ addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true,
+ "parentType", "childType"),
+ "name", "keyword", "town", "keyword", "age", "integer"))
);
}
List<IndexRequestBuilder> requests = new ArrayList<>();
diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/fetch/ParentJoinFieldSubFetchPhaseTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/fetch/ParentJoinFieldSubFetchPhaseTests.java
index 7eb2c8f357..72bb1629ca 100644
--- a/modules/parent-join/src/test/java/org/elasticsearch/join/fetch/ParentJoinFieldSubFetchPhaseTests.java
+++ b/modules/parent-join/src/test/java/org/elasticsearch/join/fetch/ParentJoinFieldSubFetchPhaseTests.java
@@ -49,9 +49,11 @@ public class ParentJoinFieldSubFetchPhaseTests extends ESSingleNodeTestCase {
.startObject("properties")
.startObject("join_field")
.field("type", "join")
- .field("parent", "child")
- .field("child", "grand_child")
- .field("product", "item")
+ .startObject("relations")
+ .field("parent", "child")
+ .field("child", "grand_child")
+ .field("product", "item")
+ .endObject()
.endObject()
.endObject()
.endObject().string();
diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/ParentJoinFieldMapperTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/ParentJoinFieldMapperTests.java
index d1b726a02d..068f39d597 100644
--- a/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/ParentJoinFieldMapperTests.java
+++ b/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/ParentJoinFieldMapperTests.java
@@ -50,7 +50,9 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
.startObject("properties")
.startObject("join_field")
.field("type", "join")
- .field("parent", "child")
+ .startObject("relations")
+ .field("parent", "child")
+ .endObject()
.endObject()
.endObject()
.endObject().string();
@@ -97,8 +99,10 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
.startObject("properties")
.startObject("join_field")
.field("type", "join")
- .field("parent", "child")
- .field("child", "grand_child")
+ .startObject("relations")
+ .field("parent", "child")
+ .field("child", "grand_child")
+ .endObject()
.endObject()
.endObject()
.endObject().string();
@@ -176,8 +180,10 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
String mapping = XContentFactory.jsonBuilder().startObject().startObject("properties")
.startObject("join_field")
.field("type", "join")
- .field("parent", "child")
- .array("child", "grand_child1", "grand_child2")
+ .startObject("relations")
+ .field("parent", "child")
+ .array("child", "grand_child1", "grand_child2")
+ .endObject()
.endObject()
.endObject().endObject().string();
IndexService indexService = createIndex("test");
@@ -189,7 +195,9 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
final String updateMapping = XContentFactory.jsonBuilder().startObject().startObject("properties")
.startObject("join_field")
.field("type", "join")
- .array("child", "grand_child1", "grand_child2")
+ .startObject("relations")
+ .array("child", "grand_child1", "grand_child2")
+ .endObject()
.endObject()
.endObject().endObject().string();
IllegalStateException exc = expectThrows(IllegalStateException.class,
@@ -202,8 +210,10 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
final String updateMapping = XContentFactory.jsonBuilder().startObject().startObject("properties")
.startObject("join_field")
.field("type", "join")
- .field("parent", "child")
- .field("child", "grand_child1")
+ .startObject("relations")
+ .field("parent", "child")
+ .field("child", "grand_child1")
+ .endObject()
.endObject()
.endObject().endObject().string();
IllegalStateException exc = expectThrows(IllegalStateException.class,
@@ -216,9 +226,11 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
final String updateMapping = XContentFactory.jsonBuilder().startObject().startObject("properties")
.startObject("join_field")
.field("type", "join")
- .field("uber_parent", "parent")
- .field("parent", "child")
- .array("child", "grand_child1", "grand_child2")
+ .startObject("relations")
+ .field("uber_parent", "parent")
+ .field("parent", "child")
+ .array("child", "grand_child1", "grand_child2")
+ .endObject()
.endObject()
.endObject().endObject().string();
IllegalStateException exc = expectThrows(IllegalStateException.class,
@@ -230,10 +242,12 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
{
final String updateMapping = XContentFactory.jsonBuilder().startObject().startObject("properties")
.startObject("join_field")
- .field("type", "join")
- .field("parent", "child")
- .array("child", "grand_child1", "grand_child2")
- .field("grand_child2", "grand_grand_child")
+ .field("type", "join")
+ .startObject("relations")
+ .field("parent", "child")
+ .array("child", "grand_child1", "grand_child2")
+ .field("grand_child2", "grand_grand_child")
+ .endObject()
.endObject()
.endObject().endObject().string();
IllegalStateException exc = expectThrows(IllegalStateException.class,
@@ -246,8 +260,10 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
final String updateMapping = XContentFactory.jsonBuilder().startObject().startObject("properties")
.startObject("join_field")
.field("type", "join")
- .array("parent", "child", "child2")
- .array("child", "grand_child1", "grand_child2")
+ .startObject("relations")
+ .array("parent", "child", "child2")
+ .array("child", "grand_child1", "grand_child2")
+ .endObject()
.endObject()
.endObject().endObject().string();
docMapper = indexService.mapperService().merge("type", new CompressedXContent(updateMapping),
@@ -264,9 +280,11 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
final String updateMapping = XContentFactory.jsonBuilder().startObject().startObject("properties")
.startObject("join_field")
.field("type", "join")
- .array("parent", "child", "child2")
- .array("child", "grand_child1", "grand_child2")
- .array("other", "child_other1", "child_other2")
+ .startObject("relations")
+ .array("parent", "child", "child2")
+ .array("child", "grand_child1", "grand_child2")
+ .array("other", "child_other1", "child_other2")
+ .endObject()
.endObject()
.endObject().endObject().string();
docMapper = indexService.mapperService().merge("type", new CompressedXContent(updateMapping),
@@ -288,7 +306,9 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
.startObject("properties")
.startObject("join_field")
.field("type", "join")
- .field("parent", "child")
+ .startObject("relations")
+ .field("parent", "child")
+ .endObject()
.endObject()
.endObject()
.endObject()
@@ -308,7 +328,9 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
.startObject("fields")
.startObject("join_field")
.field("type", "join")
- .field("parent", "child")
+ .startObject("relations")
+ .field("parent", "child")
+ .endObject()
.endObject()
.endObject()
.endObject()
@@ -328,12 +350,16 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
.startObject("properties")
.startObject("join_field")
.field("type", "join")
- .field("parent", "child")
- .field("child", "grand_child")
+ .startObject("relations")
+ .field("parent", "child")
+ .field("child", "grand_child")
+ .endObject()
.endObject()
.startObject("another_join_field")
.field("type", "join")
- .field("product", "item")
+ .startObject("relations")
+ .field("product", "item")
+ .endObject()
.endObject()
.endObject()
.endObject().string();
@@ -347,8 +373,10 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
.startObject("properties")
.startObject("join_field")
.field("type", "join")
- .field("parent", "child")
- .field("child", "grand_child")
+ .startObject("relations")
+ .field("parent", "child")
+ .field("child", "grand_child")
+ .endObject()
.endObject()
.endObject()
.endObject().string();
@@ -372,8 +400,10 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
.startObject("properties")
.startObject("join_field")
.field("type", "join")
- .field("parent", "child")
- .field("child", "grand_child")
+ .startObject("relations")
+ .field("parent", "child")
+ .field("child", "grand_child")
+ .endObject()
.endObject()
.endObject()
.endObject().string();
@@ -392,12 +422,14 @@ public class ParentJoinFieldMapperTests extends ESSingleNodeTestCase {
.startObject("join_field")
.field("type", "join")
.field("eager_global_ordinals", false)
- .field("parent", "child")
- .field("child", "grand_child")
+ .startObject("relations")
+ .field("parent", "child")
+ .field("child", "grand_child")
+ .endObject()
.endObject()
.endObject()
.endObject().string();
- docMapper = service.mapperService().merge("type", new CompressedXContent(mapping),
+ service.mapperService().merge("type", new CompressedXContent(mapping),
MapperService.MergeReason.MAPPING_UPDATE, false);
assertFalse(service.mapperService().fullName("join_field").eagerGlobalOrdinals());
assertNotNull(service.mapperService().fullName("join_field#parent"));
diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ChildQuerySearchIT.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ChildQuerySearchIT.java
index e7a57328b6..14503086ab 100644
--- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ChildQuerySearchIT.java
+++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ChildQuerySearchIT.java
@@ -29,7 +29,6 @@ import org.elasticsearch.common.lucene.search.function.CombineFunction;
import org.elasticsearch.common.lucene.search.function.FiltersFunctionScoreQuery;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
-import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.IdsQueryBuilder;
import org.elasticsearch.index.query.InnerHitBuilder;
@@ -102,7 +101,8 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("grandchild", "_parent", "type=child"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child,child=grandchild"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true,
+ "parent", "child", "child", "grandchild")));
}
ensureGreen();
@@ -164,7 +164,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("test", "_parent", "type=foo"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,foo=test"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "foo", "test")));
}
ensureGreen();
@@ -188,7 +188,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -295,7 +295,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
List<IndexRequestBuilder> builders = new ArrayList<>();
@@ -339,7 +339,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
Map<String, Set<String>> parentToChildren = new HashMap<>();
@@ -393,7 +393,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -467,7 +467,9 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent", "c_field", "type=keyword"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child", "c_field", "type=keyword"));
+ .addMapping("doc",
+ addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"),
+ "c_field", "keyword")));
}
ensureGreen();
@@ -511,7 +513,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
// index simple data
@@ -551,7 +553,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -584,7 +586,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -613,7 +615,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -650,7 +652,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -724,7 +726,9 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties")
.startObject("join_field")
.field("type", "join")
- .field("parent", new String[] {"child", "child1"})
+ .startObject("relations")
+ .field("parent", new String[] {"child", "child1"})
+ .endObject()
.endObject()
.endObject().endObject().endObject()
));
@@ -818,7 +822,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -863,7 +867,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -893,7 +897,6 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
assertThat(searchResponse.getHits().getHits()[0].getId(), equalTo("2"));
}
- @AwaitsFix(bugUrl = "wait for inner hits to be fixed")
public void testHasChildInnerHitsHighlighting() throws Exception {
if (legacy()) {
assertAcked(prepareCreate("test")
@@ -901,7 +904,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -931,7 +934,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -969,7 +972,8 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent", "c_field", "type=keyword"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child", "p_field", "type=keyword", "c_field", "type=keyword"));
+ .addMapping("doc", addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"),
+ "c_field", "keyword", "p_field", "keyword")));
}
ensureGreen();
@@ -1022,7 +1026,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -1089,7 +1093,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -1124,7 +1128,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
} else {
assertAcked(prepareCreate("test")
.setSettings("index.refresh_interval", -1)
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -1195,7 +1199,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.put(indexSettings())
.put("index.refresh_interval", -1)
)
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -1223,7 +1227,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -1294,9 +1298,11 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
assertAcked(prepareCreate("grandissue")
.addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties")
.startObject("join_field")
- .field("type", "join")
- .field("grandparent", "parent")
- .field("parent", new String[] {"child_type_one", "child_type_two"})
+ .field("type", "join")
+ .startObject("relations")
+ .field("grandparent", "parent")
+ .field("parent", new String[] {"child_type_one", "child_type_two"})
+ .endObject()
.endObject()
.endObject().endObject().endObject()
));
@@ -1350,7 +1356,9 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child", "objects", "type=nested"));
+ .addMapping("doc",
+ addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"),
+ "objects", "nested")));
}
ensureGreen();
@@ -1396,7 +1404,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -1503,7 +1511,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
} else {
assertAcked(prepareCreate("test")
.setSettings("index.refresh_interval", -1)
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -1551,7 +1559,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
for (int i = 0; i < 10; i++) {
@@ -1599,7 +1607,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -1683,7 +1691,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
ensureGreen();
@@ -2001,7 +2009,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
.addMapping("parent-type").addMapping("child-type", "_parent", "type=parent-type"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent-type=child-type"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent-type", "child-type")));
}
createIndexRequest("test", "child-type", "child-id", "parent-id").get();
createIndexRequest("test", "parent-type", "parent-id", null).get();
@@ -2017,7 +2025,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
assertSearchHits(searchResponse, "child-id");
}
- public void testHighlightersIgnoreParentChild() {
+ public void testHighlightersIgnoreParentChild() throws IOException {
if (legacy()) {
assertAcked(prepareCreate("test")
.addMapping("parent-type", "searchText", "type=text,term_vector=with_positions_offsets,index_options=offsets")
@@ -2025,8 +2033,20 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
"type=text,term_vector=with_positions_offsets,index_options=offsets"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent-type=child-type",
- "searchText", "type=text,term_vector=with_positions_offsets,index_options=offsets"));
+ .addMapping("doc", jsonBuilder().startObject().startObject("properties")
+ .startObject("join_field")
+ .field("type", "join")
+ .startObject("relations")
+ .field("parent-type", "child-type")
+ .endObject()
+ .endObject()
+ .startObject("searchText")
+ .field("type", "text")
+ .field("term_vector", "with_positions_offsets")
+ .field("index_options", "offsets")
+ .endObject()
+ .endObject().endObject()
+ ));
}
createIndexRequest("test", "parent-type", "parent-id", null, "searchText", "quick brown fox").get();
createIndexRequest("test", "child-type", "child-id", "parent-id", "searchText", "quick brown fox").get();
@@ -2069,8 +2089,7 @@ public class ChildQuerySearchIT extends ParentChildTestCase {
);
} else {
assertAcked(prepareCreate("my-index")
- .addMapping("doc", "join_field", "type=join,parent=child")
- );
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
createIndexRequest("my-index", "parent", "1", null).get();
createIndexRequest("my-index", "child", "2", "1").get();
diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasChildQueryBuilderTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasChildQueryBuilderTests.java
index 0eb890f52e..660485ee01 100644
--- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasChildQueryBuilderTests.java
+++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasChildQueryBuilderTests.java
@@ -32,10 +32,10 @@ import org.apache.lucene.search.join.ScoreMode;
import org.apache.lucene.search.similarities.PerFieldSimilarityWrapper;
import org.apache.lucene.search.similarities.Similarity;
import org.elasticsearch.Version;
-import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.cluster.metadata.IndexMetaData;
import org.elasticsearch.common.compress.CompressedXContent;
import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.index.mapper.IdFieldMapper;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.query.IdsQueryBuilder;
@@ -63,6 +63,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import static org.elasticsearch.join.query.JoinQueryBuilders.hasChildQuery;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.equalTo;
@@ -95,17 +96,42 @@ public class HasChildQueryBuilderTests extends AbstractQueryTestCase<HasChildQue
@Override
protected void initializeAdditionalMappings(MapperService mapperService) throws IOException {
similarity = randomFrom("classic", "BM25");
- mapperService.merge(TYPE, new CompressedXContent(PutMappingRequest.buildFromSimplifiedDef(TYPE,
- "join_field", "type=join," + PARENT_DOC + "=" + CHILD_DOC,
- STRING_FIELD_NAME, "type=text",
- STRING_FIELD_NAME_2, "type=keyword",
- "custom_string", "type=text,similarity=" + similarity,
- INT_FIELD_NAME, "type=integer",
- DOUBLE_FIELD_NAME, "type=double",
- BOOLEAN_FIELD_NAME, "type=boolean",
- DATE_FIELD_NAME, "type=date",
- OBJECT_FIELD_NAME, "type=object"
- ).string()), MapperService.MergeReason.MAPPING_UPDATE, false);
+ XContentBuilder mapping = jsonBuilder().startObject().startObject("doc").startObject("properties")
+ .startObject("join_field")
+ .field("type", "join")
+ .startObject("relations")
+ .field(PARENT_DOC, CHILD_DOC)
+ .endObject()
+ .endObject()
+ .startObject(STRING_FIELD_NAME)
+ .field("type", "text")
+ .endObject()
+ .startObject(STRING_FIELD_NAME_2)
+ .field("type", "keyword")
+ .endObject()
+ .startObject(INT_FIELD_NAME)
+ .field("type", "integer")
+ .endObject()
+ .startObject(DOUBLE_FIELD_NAME)
+ .field("type", "double")
+ .endObject()
+ .startObject(BOOLEAN_FIELD_NAME)
+ .field("type", "boolean")
+ .endObject()
+ .startObject(DATE_FIELD_NAME)
+ .field("type", "date")
+ .endObject()
+ .startObject(OBJECT_FIELD_NAME)
+ .field("type", "object")
+ .endObject()
+ .startObject("custom_string")
+ .field("type", "text")
+ .field("similarity", similarity)
+ .endObject()
+ .endObject().endObject().endObject();
+
+ mapperService.merge(TYPE,
+ new CompressedXContent(mapping.string()), MapperService.MergeReason.MAPPING_UPDATE, false);
}
/**
diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasParentQueryBuilderTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasParentQueryBuilderTests.java
index 8be0b93743..4c04622780 100644
--- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasParentQueryBuilderTests.java
+++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasParentQueryBuilderTests.java
@@ -55,6 +55,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import static org.elasticsearch.join.query.JoinQueryBuilders.hasParentQuery;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.equalTo;
@@ -83,16 +84,38 @@ public class HasParentQueryBuilderTests extends AbstractQueryTestCase<HasParentQ
@Override
protected void initializeAdditionalMappings(MapperService mapperService) throws IOException {
- mapperService.merge(TYPE, new CompressedXContent(PutMappingRequest.buildFromSimplifiedDef(TYPE,
- "join_field", "type=join," + PARENT_DOC + "=" + CHILD_DOC,
- STRING_FIELD_NAME, "type=text",
- STRING_FIELD_NAME_2, "type=keyword",
- INT_FIELD_NAME, "type=integer",
- DOUBLE_FIELD_NAME, "type=double",
- BOOLEAN_FIELD_NAME, "type=boolean",
- DATE_FIELD_NAME, "type=date",
- OBJECT_FIELD_NAME, "type=object"
- ).string()), MapperService.MergeReason.MAPPING_UPDATE, false);
+ XContentBuilder mapping = jsonBuilder().startObject().startObject("doc").startObject("properties")
+ .startObject("join_field")
+ .field("type", "join")
+ .startObject("relations")
+ .field(PARENT_DOC, CHILD_DOC)
+ .endObject()
+ .endObject()
+ .startObject(STRING_FIELD_NAME)
+ .field("type", "text")
+ .endObject()
+ .startObject(STRING_FIELD_NAME_2)
+ .field("type", "keyword")
+ .endObject()
+ .startObject(INT_FIELD_NAME)
+ .field("type", "integer")
+ .endObject()
+ .startObject(DOUBLE_FIELD_NAME)
+ .field("type", "double")
+ .endObject()
+ .startObject(BOOLEAN_FIELD_NAME)
+ .field("type", "boolean")
+ .endObject()
+ .startObject(DATE_FIELD_NAME)
+ .field("type", "date")
+ .endObject()
+ .startObject(OBJECT_FIELD_NAME)
+ .field("type", "object")
+ .endObject()
+ .endObject().endObject().endObject();
+
+ mapperService.merge(TYPE,
+ new CompressedXContent(mapping.string()), MapperService.MergeReason.MAPPING_UPDATE, false);
}
/**
diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/InnerHitsIT.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/InnerHitsIT.java
index f4e6e764ac..7f9d58e78f 100644
--- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/InnerHitsIT.java
+++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/InnerHitsIT.java
@@ -90,9 +90,22 @@ public class InnerHitsIT extends ParentChildTestCase {
);
} else {
assertAcked(prepareCreate("articles")
- .addMapping("doc", "join_field", "type=join,article=comment", "title", "type=text",
- "message", "type=text,fielddata=true")
- );
+ .addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties")
+ .startObject("join_field")
+ .field("type", "join")
+ .startObject("relations")
+ .field("article", "comment")
+ .endObject()
+ .endObject()
+ .startObject("title")
+ .field("type", "text")
+ .endObject()
+ .startObject("message")
+ .field("type", "text")
+ .field("fielddata", true)
+ .endObject()
+ .endObject().endObject().endObject()
+ ));
}
List<IndexRequestBuilder> requests = new ArrayList<>();
@@ -173,8 +186,10 @@ public class InnerHitsIT extends ParentChildTestCase {
assertAcked(prepareCreate("idx")
.addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties")
.startObject("join_field")
- .field("type", "join")
- .field("parent", new String[] {"child1", "child2"})
+ .field("type", "join")
+ .startObject("relations")
+ .field("parent", new String[] {"child1", "child2"})
+ .endObject()
.endObject()
.endObject().endObject().endObject()
));
@@ -261,8 +276,8 @@ public class InnerHitsIT extends ParentChildTestCase {
);
} else {
assertAcked(prepareCreate("stack")
- .addMapping("doc", "join_field", "type=join,question=answer", "body", "type=text")
- );
+ .addMapping("doc", addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "question", "answer"),
+ "body", "text")));
}
List<IndexRequestBuilder> requests = new ArrayList<>();
requests.add(createIndexRequest("stack", "question", "1", null, "body", "I'm using HTTPS + Basic authentication "
@@ -308,9 +323,9 @@ public class InnerHitsIT extends ParentChildTestCase {
);
} else {
assertAcked(prepareCreate("articles")
- .addMapping("doc", "join_field", "type=join,article=comment,comment=remark",
- "title", "type=text", "message", "type=text")
- );
+ .addMapping("doc",
+ addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true,
+ "article", "comment", "comment", "remark"), "title", "text", "message", "text")));
}
List<IndexRequestBuilder> requests = new ArrayList<>();
@@ -376,10 +391,9 @@ public class InnerHitsIT extends ParentChildTestCase {
.addMapping("baron", "_parent", "type=earl")
);
} else {
- assertAcked(
- prepareCreate("royals")
- .addMapping("doc", "join_field", "type=join,king=prince,prince=duke,duke=earl,earl=baron")
- );
+ assertAcked(prepareCreate("royals")
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true,
+ "king", "prince", "prince", "duke", "duke", "earl", "earl", "baron")));
}
List<IndexRequestBuilder> requests = new ArrayList<>();
@@ -452,7 +466,7 @@ public class InnerHitsIT extends ParentChildTestCase {
.addMapping("child", "_parent", "type=parent"));
} else {
assertAcked(prepareCreate("index")
- .addMapping("doc", "join_field", "type=join,parent=child"));
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
List<IndexRequestBuilder> requests = new ArrayList<>();
requests.add(createIndexRequest("index", "parent", "1", null));
@@ -495,7 +509,8 @@ public class InnerHitsIT extends ParentChildTestCase {
if (legacy()) {
assertAcked(prepareCreate("index1").addMapping("child", "_parent", "type=parent"));
} else {
- assertAcked(prepareCreate("index1").addMapping("doc", "join_field", "type=join,parent=child"));
+ assertAcked(prepareCreate("index1")
+ .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child")));
}
List<IndexRequestBuilder> requests = new ArrayList<>();
requests.add(createIndexRequest("index1", "parent", "1", null));
@@ -517,7 +532,8 @@ public class InnerHitsIT extends ParentChildTestCase {
.addMapping("child_type", "_parent", "type=parent_type", "nested_type", "type=nested"));
} else {
assertAcked(prepareCreate("test")
- .addMapping("doc", "join_field", "type=join,parent_type=child_type", "nested_type", "type=nested"));
+ .addMapping("doc", addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true,
+ "parent_type", "child_type"), "nested_type", "nested")));
}
createIndexRequest("test", "parent_type", "1", null, "key", "value").get();
createIndexRequest("test", "child_type", "2", "1", "nested_type", Collections.singletonMap("key", "value")).get();
@@ -545,7 +561,9 @@ public class InnerHitsIT extends ParentChildTestCase {
);
} else {
assertAcked(prepareCreate("index1")
- .addMapping("doc", "join_field", "type=join,parent_type=child_type", "nested_type", "type=nested")
+ .addMapping("doc", addFieldMappings(
+ buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent_type", "child_type"),
+ "nested_type", "nested"))
);
}
assertAcked(prepareCreate("index2"));
diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentChildTestCase.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentChildTestCase.java
index 099671d821..188ba03f2b 100644
--- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentChildTestCase.java
+++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentChildTestCase.java
@@ -84,6 +84,39 @@ public abstract class ParentChildTestCase extends ESIntegTestCase {
return createIndexRequest(index, type, id, parentId, source);
}
+ public static Map<String, Object> buildParentJoinFieldMappingFromSimplifiedDef(String joinFieldName,
+ boolean eagerGlobalOrdinals,
+ String... relations) {
+ Map<String, Object> fields = new HashMap<>();
+
+ Map<String, Object> joinField = new HashMap<>();
+ joinField.put("type", "join");
+ joinField.put("eager_global_ordinals", eagerGlobalOrdinals);
+ Map<String, Object> relationMap = new HashMap<>();
+ for (int i = 0; i < relations.length; i+=2) {
+ String[] children = relations[i+1].split(",");
+ if (children.length > 1) {
+ relationMap.put(relations[i], children);
+ } else {
+ relationMap.put(relations[i], children[0]);
+ }
+ }
+ joinField.put("relations", relationMap);
+ fields.put(joinFieldName, joinField);
+ return Collections.singletonMap("properties", fields);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static Map<String, Object> addFieldMappings(Map<String, Object> map, String... fields) {
+ Map<String, Object> propsMap = (Map<String, Object>) map.get("properties");
+ for (int i = 0; i < fields.length; i+=2) {
+ String field = fields[i];
+ String type = fields[i + 1];
+ propsMap.put(field, Collections.singletonMap("type", type));
+ }
+ return map;
+ }
+
private IndexRequestBuilder createIndexRequest(String index, String type, String id, String parentId, Map<String, Object> source) {
String name = type;
if (legacy() == false) {
diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentIdQueryBuilderTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentIdQueryBuilderTests.java
index 43d036458b..afca17b3f8 100644
--- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentIdQueryBuilderTests.java
+++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentIdQueryBuilderTests.java
@@ -31,6 +31,7 @@ import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.cluster.metadata.IndexMetaData;
import org.elasticsearch.common.compress.CompressedXContent;
import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.mapper.TypeFieldMapper;
import org.elasticsearch.index.query.QueryShardException;
@@ -44,6 +45,7 @@ import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
+import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf;
@@ -71,15 +73,38 @@ public class ParentIdQueryBuilderTests extends AbstractQueryTestCase<ParentIdQue
@Override
protected void initializeAdditionalMappings(MapperService mapperService) throws IOException {
- mapperService.merge(TYPE, new CompressedXContent(PutMappingRequest.buildFromSimplifiedDef(TYPE,
- STRING_FIELD_NAME, "type=text",
- INT_FIELD_NAME, "type=integer",
- DOUBLE_FIELD_NAME, "type=double",
- BOOLEAN_FIELD_NAME, "type=boolean",
- DATE_FIELD_NAME, "type=date",
- OBJECT_FIELD_NAME, "type=object",
- JOIN_FIELD_NAME, "type=join,parent=child"
- ).string()), MapperService.MergeReason.MAPPING_UPDATE, false);
+ XContentBuilder mapping = jsonBuilder().startObject().startObject("doc").startObject("properties")
+ .startObject("join_field")
+ .field("type", "join")
+ .startObject("relations")
+ .field("parent", "child")
+ .endObject()
+ .endObject()
+ .startObject(STRING_FIELD_NAME)
+ .field("type", "text")
+ .endObject()
+ .startObject(STRING_FIELD_NAME_2)
+ .field("type", "keyword")
+ .endObject()
+ .startObject(INT_FIELD_NAME)
+ .field("type", "integer")
+ .endObject()
+ .startObject(DOUBLE_FIELD_NAME)
+ .field("type", "double")
+ .endObject()
+ .startObject(BOOLEAN_FIELD_NAME)
+ .field("type", "boolean")
+ .endObject()
+ .startObject(DATE_FIELD_NAME)
+ .field("type", "date")
+ .endObject()
+ .startObject(OBJECT_FIELD_NAME)
+ .field("type", "object")
+ .endObject()
+ .endObject().endObject().endObject();
+
+ mapperService.merge(TYPE,
+ new CompressedXContent(mapping.string()), MapperService.MergeReason.MAPPING_UPDATE, false);
}
@Override
diff --git a/modules/parent-join/src/test/resources/rest-api-spec/test/11_parent_child.yml b/modules/parent-join/src/test/resources/rest-api-spec/test/11_parent_child.yml
index f142bf61bc..4e7f37a79f 100644
--- a/modules/parent-join/src/test/resources/rest-api-spec/test/11_parent_child.yml
+++ b/modules/parent-join/src/test/resources/rest-api-spec/test/11_parent_child.yml
@@ -10,13 +10,14 @@ setup:
properties:
join_field:
type: join
- parent: child
+ relations:
+ parent: child
---
"Parent/child inner hits":
- skip:
- version: " - 5.4.99"
- reason: mapping.single_type was added in 5.5
+ version: " - 5.6.99"
+ reason: parent-join was added in 5.6. Disabled BWC tests until https://github.com/elastic/elasticsearch/pull/25248 is merged
- do:
index:
diff --git a/modules/parent-join/src/test/resources/rest-api-spec/test/20_parent_join.yml b/modules/parent-join/src/test/resources/rest-api-spec/test/20_parent_join.yml
index 52a524d2de..79109acb39 100644
--- a/modules/parent-join/src/test/resources/rest-api-spec/test/20_parent_join.yml
+++ b/modules/parent-join/src/test/resources/rest-api-spec/test/20_parent_join.yml
@@ -8,7 +8,7 @@ setup:
mappings:
doc:
properties:
- join_field: { "type": "join", "parent": "child", "child": "grand_child" }
+ join_field: { "type": "join", "relations": { "parent": "child", "child": "grand_child" } }
- do:
index:
@@ -107,8 +107,8 @@ setup:
---
"Test parent_id query":
- skip:
- version: " - 5.5.99"
- reason: parent-join was added in 5.6
+ version: " - 5.6.99"
+ reason: parent-join was added in 5.6. Disabled BWC tests until https://github.com/elastic/elasticsearch/pull/25248 is merged
- do:
search: