2020package org .elasticsearch .get ;
2121
2222import org .elasticsearch .ElasticsearchException ;
23+ import org .elasticsearch .Version ;
2324import org .elasticsearch .action .DocWriteResponse ;
2425import org .elasticsearch .action .ShardOperationFailedException ;
2526import org .elasticsearch .action .admin .indices .alias .Alias ;
3839import org .elasticsearch .common .xcontent .XContentFactory ;
3940import org .elasticsearch .common .xcontent .XContentType ;
4041import org .elasticsearch .index .engine .VersionConflictEngineException ;
42+ import org .elasticsearch .plugins .Plugin ;
4143import org .elasticsearch .test .ESIntegTestCase ;
44+ import org .elasticsearch .test .InternalSettingsPlugin ;
4245
4346import java .io .IOException ;
47+ import java .util .Collection ;
4448import java .util .Collections ;
4549import java .util .HashSet ;
4650import java .util .Set ;
5862
5963public class GetActionIT extends ESIntegTestCase {
6064
65+ @ Override
66+ protected Collection <Class <? extends Plugin >> nodePlugins () {
67+ return Collections .singleton (InternalSettingsPlugin .class );
68+ }
69+
6170 public void testSimpleGet () {
6271 assertAcked (prepareCreate ("test" )
6372 .addMapping ("type1" , "field1" , "type=keyword,store=true" , "field2" , "type=keyword,store=true" )
@@ -246,15 +255,55 @@ public void testGetDocWithMultivaluedFields() throws Exception {
246255 .startObject ("field" ).field ("type" , "text" ).field ("store" , true ).endObject ()
247256 .endObject ()
248257 .endObject ().endObject ().string ();
258+ assertAcked (prepareCreate ("test" )
259+ .addMapping ("type1" , mapping1 , XContentType .JSON ));
260+ ensureGreen ();
261+
262+ GetResponse response = client ().prepareGet ("test" , "type1" , "1" ).get ();
263+ assertThat (response .isExists (), equalTo (false ));
264+ assertThat (response .isExists (), equalTo (false ));
265+
266+ client ().prepareIndex ("test" , "type1" , "1" )
267+ .setSource (jsonBuilder ().startObject ().array ("field" , "1" , "2" ).endObject ()).get ();
268+
269+ response = client ().prepareGet ("test" , "type1" , "1" ).setStoredFields ("field" ).get ();
270+ assertThat (response .isExists (), equalTo (true ));
271+ assertThat (response .getId (), equalTo ("1" ));
272+ assertThat (response .getType (), equalTo ("type1" ));
273+ Set <String > fields = new HashSet <>(response .getFields ().keySet ());
274+ assertThat (fields , equalTo (singleton ("field" )));
275+ assertThat (response .getFields ().get ("field" ).getValues ().size (), equalTo (2 ));
276+ assertThat (response .getFields ().get ("field" ).getValues ().get (0 ).toString (), equalTo ("1" ));
277+ assertThat (response .getFields ().get ("field" ).getValues ().get (1 ).toString (), equalTo ("2" ));
278+
279+ // Now test values being fetched from stored fields.
280+ refresh ();
281+ response = client ().prepareGet ("test" , "type1" , "1" ).setStoredFields ("field" ).get ();
282+ assertThat (response .isExists (), equalTo (true ));
283+ assertThat (response .getId (), equalTo ("1" ));
284+ fields = new HashSet <>(response .getFields ().keySet ());
285+ assertThat (fields , equalTo (singleton ("field" )));
286+ assertThat (response .getFields ().get ("field" ).getValues ().size (), equalTo (2 ));
287+ assertThat (response .getFields ().get ("field" ).getValues ().get (0 ).toString (), equalTo ("1" ));
288+ assertThat (response .getFields ().get ("field" ).getValues ().get (1 ).toString (), equalTo ("2" ));
289+ }
290+
291+ public void testGetDocWithMultivaluedFieldsMultiTypeBWC () throws Exception {
292+ assertTrue ("remove this multi type test" , Version .CURRENT .before (Version .fromString ("7.0.0" )));
293+ String mapping1 = XContentFactory .jsonBuilder ().startObject ().startObject ("type1" )
294+ .startObject ("properties" )
295+ .startObject ("field" ).field ("type" , "text" ).field ("store" , true ).endObject ()
296+ .endObject ()
297+ .endObject ().endObject ().string ();
249298 String mapping2 = XContentFactory .jsonBuilder ().startObject ().startObject ("type2" )
250- .startObject ("properties" )
251- .startObject ("field" ).field ("type" , "text" ).field ("store" , true ).endObject ()
252- .endObject ()
253- .endObject ().endObject ().string ();
299+ .startObject ("properties" )
300+ .startObject ("field" ).field ("type" , "text" ).field ("store" , true ).endObject ()
301+ .endObject ()
302+ .endObject ().endObject ().string ();
254303 assertAcked (prepareCreate ("test" )
255- .addMapping ("type1" , mapping1 , XContentType .JSON )
256- .addMapping ("type2" , mapping2 , XContentType .JSON )
257- .setSettings ("index.refresh_interval" , -1 , "index.mapping.single_type " , false ));
304+ .addMapping ("type1" , mapping1 , XContentType .JSON )
305+ .addMapping ("type2" , mapping2 , XContentType .JSON )
306+ .setSettings ("index.refresh_interval" , -1 , "index.version.created " , Version . V_5_6_0 . id )); // multi types in 5.6
258307 ensureGreen ();
259308
260309 GetResponse response = client ().prepareGet ("test" , "type1" , "1" ).get ();
@@ -263,10 +312,10 @@ public void testGetDocWithMultivaluedFields() throws Exception {
263312 assertThat (response .isExists (), equalTo (false ));
264313
265314 client ().prepareIndex ("test" , "type1" , "1" )
266- .setSource (jsonBuilder ().startObject ().array ("field" , "1" , "2" ).endObject ()).get ();
315+ .setSource (jsonBuilder ().startObject ().array ("field" , "1" , "2" ).endObject ()).get ();
267316
268317 client ().prepareIndex ("test" , "type2" , "1" )
269- .setSource (jsonBuilder ().startObject ().array ("field" , "1" , "2" ).endObject ()).get ();
318+ .setSource (jsonBuilder ().startObject ().array ("field" , "1" , "2" ).endObject ()).get ();
270319
271320 response = client ().prepareGet ("test" , "type1" , "1" ).setStoredFields ("field" ).get ();
272321 assertThat (response .isExists (), equalTo (true ));
@@ -524,12 +573,47 @@ public void testMultiGetWithVersion() throws Exception {
524573 assertThat (response .getResponses ()[2 ].getResponse ().getSourceAsMap ().get ("field" ).toString (), equalTo ("value2" ));
525574 }
526575
527- public void testGetFieldsMetaData () throws Exception {
576+ public void testGetFieldsMetaDataWithRouting () throws Exception {
577+ assertAcked (prepareCreate ("test" )
578+ .addMapping ("doc" , "field1" , "type=keyword,store=true" )
579+ .addAlias (new Alias ("alias" ))
580+ .setSettings ("index.refresh_interval" , -1 , "index.version.created" , Version .V_5_6_0 .id )); // multi types in 5.6
581+
582+ client ().prepareIndex ("test" , "doc" , "1" )
583+ .setRouting ("1" )
584+ .setSource (jsonBuilder ().startObject ().field ("field1" , "value" ).endObject ())
585+ .get ();
586+
587+ GetResponse getResponse = client ().prepareGet (indexOrAlias (), "doc" , "1" )
588+ .setRouting ("1" )
589+ .setStoredFields ("field1" )
590+ .get ();
591+ assertThat (getResponse .isExists (), equalTo (true ));
592+ assertThat (getResponse .getField ("field1" ).isMetadataField (), equalTo (false ));
593+ assertThat (getResponse .getField ("field1" ).getValue ().toString (), equalTo ("value" ));
594+ assertThat (getResponse .getField ("_routing" ).isMetadataField (), equalTo (true ));
595+ assertThat (getResponse .getField ("_routing" ).getValue ().toString (), equalTo ("1" ));
596+
597+ flush ();
598+
599+ getResponse = client ().prepareGet (indexOrAlias (), "doc" , "1" )
600+ .setStoredFields ("field1" )
601+ .setRouting ("1" )
602+ .get ();
603+ assertThat (getResponse .isExists (), equalTo (true ));
604+ assertThat (getResponse .getField ("field1" ).isMetadataField (), equalTo (false ));
605+ assertThat (getResponse .getField ("field1" ).getValue ().toString (), equalTo ("value" ));
606+ assertThat (getResponse .getField ("_routing" ).isMetadataField (), equalTo (true ));
607+ assertThat (getResponse .getField ("_routing" ).getValue ().toString (), equalTo ("1" ));
608+ }
609+
610+ public void testGetFieldsMetaDataWithParentChild () throws Exception {
611+ assertTrue ("remove this multi type test" , Version .CURRENT .before (Version .fromString ("7.0.0" )));
528612 assertAcked (prepareCreate ("test" )
529613 .addMapping ("parent" )
530614 .addMapping ("my-type1" , "_parent" , "type=parent" , "field1" , "type=keyword,store=true" )
531615 .addAlias (new Alias ("alias" ))
532- .setSettings ("index.refresh_interval" , -1 , "index.mapping.single_type " , false ));
616+ .setSettings ("index.refresh_interval" , -1 , "index.version.created " , Version . V_5_6_0 . id )); // multi types in 5.6
533617
534618 client ().prepareIndex ("test" , "my-type1" , "1" )
535619 .setRouting ("1" )
@@ -593,7 +677,7 @@ public void testGetFieldsNonLeafField() throws Exception {
593677
594678 public void testGetFieldsComplexField () throws Exception {
595679 assertAcked (prepareCreate ("my-index" )
596- .setSettings ("index.refresh_interval" , -1 , "index.mapping.single_type " , false )
680+ .setSettings ("index.refresh_interval" , -1 , "index.version.created " , Version . V_5_6_0 . id ) // multi types in 5.6
597681 .addMapping ("my-type2" , jsonBuilder ().startObject ().startObject ("my-type2" ).startObject ("properties" )
598682 .startObject ("field1" ).field ("type" , "object" ).startObject ("properties" )
599683 .startObject ("field2" ).field ("type" , "object" ).startObject ("properties" )
0 commit comments