27
27
import org .elasticsearch .index .mapper .*;
28
28
import org .elasticsearch .index .mapper .core .DateFieldMapper ;
29
29
import org .elasticsearch .index .mapper .core .StringFieldMapper ;
30
+ import org .elasticsearch .index .mapper .multifield .MultiFieldMapper ;
30
31
31
32
import java .io .IOException ;
32
33
import java .util .Map ;
@@ -69,19 +70,19 @@ public static class Builder extends Mapper.Builder<Builder, AttachmentMapper> {
69
70
70
71
private Integer defaultIndexedChars = null ;
71
72
72
- private StringFieldMapper .Builder contentBuilder ;
73
+ private Mapper .Builder contentBuilder ;
73
74
74
- private StringFieldMapper .Builder titleBuilder = stringField ("title" );
75
+ private Mapper .Builder titleBuilder = stringField ("title" );
75
76
76
- private StringFieldMapper .Builder nameBuilder = stringField ("name" );
77
+ private Mapper .Builder nameBuilder = stringField ("name" );
77
78
78
- private StringFieldMapper .Builder authorBuilder = stringField ("author" );
79
+ private Mapper .Builder authorBuilder = stringField ("author" );
79
80
80
- private StringFieldMapper .Builder keywordsBuilder = stringField ("keywords" );
81
+ private Mapper .Builder keywordsBuilder = stringField ("keywords" );
81
82
82
- private DateFieldMapper .Builder dateBuilder = dateField ("date" );
83
+ private Mapper .Builder dateBuilder = dateField ("date" );
83
84
84
- private StringFieldMapper .Builder contentTypeBuilder = stringField ("content_type" );
85
+ private Mapper .Builder contentTypeBuilder = stringField ("content_type" );
85
86
86
87
public Builder (String name ) {
87
88
super (name );
@@ -99,37 +100,37 @@ public Builder defaultIndexedChars(int defaultIndexedChars) {
99
100
return this ;
100
101
}
101
102
102
- public Builder content (StringFieldMapper .Builder content ) {
103
+ public Builder content (Mapper .Builder content ) {
103
104
this .contentBuilder = content ;
104
105
return this ;
105
106
}
106
107
107
- public Builder date (DateFieldMapper .Builder date ) {
108
+ public Builder date (Mapper .Builder date ) {
108
109
this .dateBuilder = date ;
109
110
return this ;
110
111
}
111
112
112
- public Builder author (StringFieldMapper .Builder author ) {
113
+ public Builder author (Mapper .Builder author ) {
113
114
this .authorBuilder = author ;
114
115
return this ;
115
116
}
116
117
117
- public Builder title (StringFieldMapper .Builder title ) {
118
+ public Builder title (Mapper .Builder title ) {
118
119
this .titleBuilder = title ;
119
120
return this ;
120
121
}
121
122
122
- public Builder name (StringFieldMapper .Builder name ) {
123
+ public Builder name (Mapper .Builder name ) {
123
124
this .nameBuilder = name ;
124
125
return this ;
125
126
}
126
127
127
- public Builder keywords (StringFieldMapper .Builder keywords ) {
128
+ public Builder keywords (Mapper .Builder keywords ) {
128
129
this .keywordsBuilder = keywords ;
129
130
return this ;
130
131
}
131
132
132
- public Builder contentType (StringFieldMapper .Builder contentType ) {
133
+ public Builder contentType (Mapper .Builder contentType ) {
133
134
this .contentTypeBuilder = contentType ;
134
135
return this ;
135
136
}
@@ -140,16 +141,16 @@ public AttachmentMapper build(BuilderContext context) {
140
141
context .path ().pathType (pathType );
141
142
142
143
// create the content mapper under the actual name
143
- StringFieldMapper contentMapper = contentBuilder .build (context );
144
+ Mapper contentMapper = contentBuilder .build (context );
144
145
145
146
// create the DC one under the name
146
147
context .path ().add (name );
147
- DateFieldMapper dateMapper = dateBuilder .build (context );
148
- StringFieldMapper authorMapper = authorBuilder .build (context );
149
- StringFieldMapper titleMapper = titleBuilder .build (context );
150
- StringFieldMapper nameMapper = nameBuilder .build (context );
151
- StringFieldMapper keywordsMapper = keywordsBuilder .build (context );
152
- StringFieldMapper contentTypeMapper = contentTypeBuilder .build (context );
148
+ Mapper dateMapper = dateBuilder .build (context );
149
+ Mapper authorMapper = authorBuilder .build (context );
150
+ Mapper titleMapper = titleBuilder .build (context );
151
+ Mapper nameMapper = nameBuilder .build (context );
152
+ Mapper keywordsMapper = keywordsBuilder .build (context );
153
+ Mapper contentTypeMapper = contentTypeBuilder .build (context );
153
154
context .path ().remove ();
154
155
155
156
context .path ().pathType (origPathType );
@@ -199,21 +200,30 @@ public Mapper.Builder parse(String name, Map<String, Object> node, ParserContext
199
200
String propName = entry1 .getKey ();
200
201
Object propNode = entry1 .getValue ();
201
202
203
+ // Check if we have a multifield here
204
+ boolean isMultifield = false ;
205
+ if (propNode != null && propNode instanceof Map ) {
206
+ Object oType = ((Map <String , Object >) propNode ).get ("type" );
207
+ if (oType != null && oType .equals (MultiFieldMapper .CONTENT_TYPE )) {
208
+ isMultifield = true ;
209
+ }
210
+ }
211
+
202
212
if (name .equals (propName )) {
203
213
// that is the content
204
- builder .content (( StringFieldMapper . Builder ) parserContext .typeParser ("string" ).parse (name , (Map <String , Object >) propNode , parserContext ));
214
+ builder .content (parserContext .typeParser (isMultifield ? MultiFieldMapper . CONTENT_TYPE : StringFieldMapper . CONTENT_TYPE ).parse (name , (Map <String , Object >) propNode , parserContext ));
205
215
} else if ("date" .equals (propName )) {
206
- builder .date (( DateFieldMapper . Builder ) parserContext .typeParser ("date" ).parse ("date" , (Map <String , Object >) propNode , parserContext ));
216
+ builder .date (parserContext .typeParser (isMultifield ? MultiFieldMapper . CONTENT_TYPE : DateFieldMapper . CONTENT_TYPE ).parse ("date" , (Map <String , Object >) propNode , parserContext ));
207
217
} else if ("title" .equals (propName )) {
208
- builder .title (( StringFieldMapper . Builder ) parserContext .typeParser ("string" ).parse ("title" , (Map <String , Object >) propNode , parserContext ));
218
+ builder .title (parserContext .typeParser (isMultifield ? MultiFieldMapper . CONTENT_TYPE : StringFieldMapper . CONTENT_TYPE ).parse ("title" , (Map <String , Object >) propNode , parserContext ));
209
219
} else if ("name" .equals (propName )) {
210
- builder .name (( StringFieldMapper . Builder ) parserContext .typeParser ("string" ).parse ("name" , (Map <String , Object >) propNode , parserContext ));
220
+ builder .name (parserContext .typeParser (isMultifield ? MultiFieldMapper . CONTENT_TYPE : StringFieldMapper . CONTENT_TYPE ).parse ("name" , (Map <String , Object >) propNode , parserContext ));
211
221
} else if ("author" .equals (propName )) {
212
- builder .author (( StringFieldMapper . Builder ) parserContext .typeParser ("string" ).parse ("author" , (Map <String , Object >) propNode , parserContext ));
222
+ builder .author (parserContext .typeParser (isMultifield ? MultiFieldMapper . CONTENT_TYPE : StringFieldMapper . CONTENT_TYPE ).parse ("author" , (Map <String , Object >) propNode , parserContext ));
213
223
} else if ("keywords" .equals (propName )) {
214
- builder .keywords (( StringFieldMapper . Builder ) parserContext .typeParser ("string" ).parse ("keywords" , (Map <String , Object >) propNode , parserContext ));
224
+ builder .keywords (parserContext .typeParser (isMultifield ? MultiFieldMapper . CONTENT_TYPE : StringFieldMapper . CONTENT_TYPE ).parse ("keywords" , (Map <String , Object >) propNode , parserContext ));
215
225
} else if ("content_type" .equals (propName )) {
216
- builder .contentType (( StringFieldMapper . Builder ) parserContext .typeParser ("string" ).parse ("content_type" , (Map <String , Object >) propNode , parserContext ));
226
+ builder .contentType (parserContext .typeParser (isMultifield ? MultiFieldMapper . CONTENT_TYPE : StringFieldMapper . CONTENT_TYPE ).parse ("content_type" , (Map <String , Object >) propNode , parserContext ));
217
227
}
218
228
}
219
229
}
@@ -229,23 +239,23 @@ public Mapper.Builder parse(String name, Map<String, Object> node, ParserContext
229
239
230
240
private final int defaultIndexedChars ;
231
241
232
- private final StringFieldMapper contentMapper ;
242
+ private final Mapper contentMapper ;
233
243
234
- private final DateFieldMapper dateMapper ;
244
+ private final Mapper dateMapper ;
235
245
236
- private final StringFieldMapper authorMapper ;
246
+ private final Mapper authorMapper ;
237
247
238
- private final StringFieldMapper titleMapper ;
248
+ private final Mapper titleMapper ;
239
249
240
- private final StringFieldMapper nameMapper ;
250
+ private final Mapper nameMapper ;
241
251
242
- private final StringFieldMapper keywordsMapper ;
252
+ private final Mapper keywordsMapper ;
243
253
244
- private final StringFieldMapper contentTypeMapper ;
254
+ private final Mapper contentTypeMapper ;
245
255
246
- public AttachmentMapper (String name , ContentPath .Type pathType , int defaultIndexedChars , StringFieldMapper contentMapper ,
247
- DateFieldMapper dateMapper , StringFieldMapper titleMapper , StringFieldMapper nameMapper , StringFieldMapper authorMapper ,
248
- StringFieldMapper keywordsMapper , StringFieldMapper contentTypeMapper ) {
256
+ public AttachmentMapper (String name , ContentPath .Type pathType , int defaultIndexedChars , Mapper contentMapper ,
257
+ Mapper dateMapper , Mapper titleMapper , Mapper nameMapper , Mapper authorMapper ,
258
+ Mapper keywordsMapper , Mapper contentTypeMapper ) {
249
259
this .name = name ;
250
260
this .pathType = pathType ;
251
261
this .defaultIndexedChars = defaultIndexedChars ;
0 commit comments