Skip to content

Commit 7cf7cb9

Browse files
msachsmohsinh
authored andcommitted
DATAES-132 - adding possibility to configure mapping with nested and include in parent option
1 parent cd9ed2c commit 7cf7cb9

File tree

5 files changed

+131
-74
lines changed

5 files changed

+131
-74
lines changed

src/main/java/org/springframework/data/elasticsearch/annotations/Field.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@
1515
*/
1616
package org.springframework.data.elasticsearch.annotations;
1717

18-
import java.lang.annotation.*;
18+
import java.lang.annotation.Documented;
19+
import java.lang.annotation.ElementType;
20+
import java.lang.annotation.Inherited;
21+
import java.lang.annotation.Retention;
22+
import java.lang.annotation.RetentionPolicy;
23+
import java.lang.annotation.Target;
1924

2025
/**
2126
* @author Rizwan Idrees
@@ -46,4 +51,7 @@
4651
String indexAnalyzer() default "";
4752

4853
String[] ignoreFields() default {};
54+
55+
boolean includeInParent() default false;
56+
4957
}

src/main/java/org/springframework/data/elasticsearch/core/MappingBuilder.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,13 @@ static XContentBuilder buildMapping(Class clazz, String indexType, String idFiel
7979
// Properties
8080
XContentBuilder xContentBuilder = mapping.startObject(FIELD_PROPERTIES);
8181

82-
mapEntity(xContentBuilder, clazz, true, idFieldName, EMPTY, false, FieldType.Auto);
82+
mapEntity(xContentBuilder, clazz, true, idFieldName, EMPTY, false, FieldType.Auto,null);
8383

8484
return xContentBuilder.endObject().endObject().endObject();
8585
}
8686

8787
private static void mapEntity(XContentBuilder xContentBuilder, Class clazz, boolean isRootObject, String idFieldName,
88-
String nestedObjectFieldName, boolean nestedOrObjectField, FieldType fieldType) throws IOException {
88+
String nestedObjectFieldName, boolean nestedOrObjectField, FieldType fieldType, Field fieldAnnotation) throws IOException {
8989

9090
java.lang.reflect.Field[] fields = retrieveFields(clazz);
9191

@@ -94,7 +94,12 @@ private static void mapEntity(XContentBuilder xContentBuilder, Class clazz, bool
9494
if (nestedOrObjectField) {
9595
type = fieldType.toString().toLowerCase();
9696
}
97-
xContentBuilder.startObject(nestedObjectFieldName).field(FIELD_TYPE, type).startObject(FIELD_PROPERTIES);
97+
XContentBuilder t = xContentBuilder.startObject(nestedObjectFieldName).field(FIELD_TYPE, type);
98+
99+
if (nestedOrObjectField && FieldType.Nested == fieldType && fieldAnnotation.includeInParent()) {
100+
t.field("include_in_parent", fieldAnnotation.includeInParent());
101+
}
102+
t.startObject(FIELD_PROPERTIES);
98103
}
99104

100105
for (java.lang.reflect.Field field : fields) {
@@ -112,7 +117,7 @@ private static void mapEntity(XContentBuilder xContentBuilder, Class clazz, bool
112117
continue;
113118
}
114119
boolean nestedOrObject = isNestedOrObjectField(field);
115-
mapEntity(xContentBuilder, getFieldType(field), false, EMPTY, field.getName(), nestedOrObject, singleField.type());
120+
mapEntity(xContentBuilder, getFieldType(field), false, EMPTY, field.getName(), nestedOrObject, singleField.type(),field.getAnnotation(Field.class));
116121
if (nestedOrObject) {
117122
continue;
118123
}

0 commit comments

Comments
 (0)