@@ -138,6 +138,123 @@ public void testParseWithShadowedMultiField() throws Exception {
138
138
assertNotNull (doc .rootDoc ().getField ("field.keyword" ));
139
139
}
140
140
141
+ public void testRuntimeFieldAndArrayChildren () throws IOException {
142
+ DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
143
+ b .field ("dynamic" , "true" );
144
+ b .startObject ("runtime" );
145
+ {
146
+ b .startObject ("object" ).field ("type" , "test" ).endObject ();
147
+ }
148
+ b .endObject ();
149
+ }));
150
+
151
+ {
152
+ ParsedDocument doc = mapper .parse (source (b -> {
153
+ b .startObject ("object" );
154
+ b .array ("array" , 1 , 2 , 3 );
155
+ b .field ("foo" , "bar" );
156
+ b .endObject ();
157
+ }));
158
+ assertNotNull (doc .rootDoc ().getField ("object.foo" ));
159
+ assertNotNull (doc .rootDoc ().getField ("object.array" ));
160
+ }
161
+
162
+ {
163
+ ParsedDocument doc = mapper .parse (source (b -> {
164
+ b .startArray ("object" );
165
+ {
166
+ b .startObject ().array ("array" , 1 , 2 , 3 ).endObject ();
167
+ b .startObject ().field ("foo" , "bar" ).endObject ();
168
+ }
169
+ b .endArray ();
170
+ }));
171
+ assertNotNull (doc .rootDoc ().getField ("object.foo" ));
172
+ assertNotNull (doc .rootDoc ().getField ("object.array" ));
173
+ }
174
+ }
175
+
176
+ public void testRuntimeFieldDoesNotShadowObjectChildren () throws IOException {
177
+ DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
178
+ b .field ("dynamic" , "true" );
179
+ b .startObject ("runtime" );
180
+ {
181
+ b .startObject ("location" ).field ("type" , "test" ).endObject ();
182
+ b .startObject ("country" ).field ("type" , "test" ).endObject ();
183
+ }
184
+ b .endObject ();
185
+ b .startObject ("properties" );
186
+ {
187
+ b .startObject ("timestamp" ).field ("type" , "date" ).endObject ();
188
+ b .startObject ("concrete" ).field ("type" , "keyword" ).endObject ();
189
+ }
190
+ b .endObject ();
191
+ }));
192
+
193
+ {
194
+ ParsedDocument doc = mapper .parse (source (b -> {
195
+ b .field ("timestamp" , "1998-04-30T14:30:17-05:00" );
196
+ b .startObject ("location" );
197
+ {
198
+ b .field ("lat" , 13.5 );
199
+ b .field ("lon" , 34.89 );
200
+ }
201
+ b .endObject ();
202
+ b .field ("country" , "de" );
203
+ b .field ("concrete" , "foo" );
204
+ }));
205
+
206
+ assertNotNull (doc .rootDoc ().getField ("timestamp" ));
207
+ assertNotNull (doc .rootDoc ().getField ("_source" ));
208
+ assertNotNull (doc .rootDoc ().getField ("location.lat" ));
209
+ assertNotNull (doc .rootDoc ().getField ("location.lon" ));
210
+ assertNotNull (doc .rootDoc ().getField ("concrete" ));
211
+ assertNull (doc .rootDoc ().getField ("country" ));
212
+ }
213
+
214
+ {
215
+ ParsedDocument doc = mapper .parse (source (b -> {
216
+ b .field ("timestamp" , "1998-04-30T14:30:17-05:00" );
217
+ b .startArray ("location" );
218
+ {
219
+ b .startObject ().field ("lat" , 13.5 ).field ("lon" , 34.89 ).endObject ();
220
+ b .startObject ().field ("lat" , 14.5 ).field ("lon" , 89.33 ).endObject ();
221
+ }
222
+ b .endArray ();
223
+ b .field ("country" , "de" );
224
+ b .field ("concrete" , "foo" );
225
+ }));
226
+
227
+ assertNotNull (doc .rootDoc ().getField ("timestamp" ));
228
+ assertNotNull (doc .rootDoc ().getField ("_source" ));
229
+ assertThat (doc .rootDoc ().getFields ("location.lat" ).length , equalTo (4 ));
230
+ assertThat (doc .rootDoc ().getFields ("location.lon" ).length , equalTo (4 ));
231
+ assertNotNull (doc .rootDoc ().getField ("concrete" ));
232
+ assertNull (doc .rootDoc ().getField ("country" ));
233
+ }
234
+
235
+ {
236
+ ParsedDocument doc = mapper .parse (source (b -> {
237
+ b .field ("timestamp" , "1998-04-30T14:30:17-05:00" );
238
+ b .startObject ("location" );
239
+ {
240
+ b .array ("lat" , 13.5 , 14.5 );
241
+ b .array ("lon" , 34.89 , 89.33 );
242
+ }
243
+ b .endObject ();
244
+ b .field ("country" , "de" );
245
+ b .field ("concrete" , "foo" );
246
+ }));
247
+
248
+ assertNotNull (doc .rootDoc ().getField ("timestamp" ));
249
+ assertNotNull (doc .rootDoc ().getField ("_source" ));
250
+ assertThat (doc .rootDoc ().getFields ("location.lat" ).length , equalTo (4 ));
251
+ assertThat (doc .rootDoc ().getFields ("location.lon" ).length , equalTo (4 ));
252
+ assertNotNull (doc .rootDoc ().getField ("concrete" ));
253
+ assertNull (doc .rootDoc ().getField ("country" ));
254
+ }
255
+
256
+ }
257
+
141
258
public void testFieldDisabled () throws Exception {
142
259
DocumentMapper mapper = createDocumentMapper (mapping (b -> {
143
260
b .startObject ("foo" ).field ("enabled" , false ).endObject ();
0 commit comments