@@ -449,4 +449,90 @@ public void testParentFilterResolvedCorrectly() throws Exception {
449449 tags = nestedTags .getAggregations ().get ("tag" );
450450 assertThat (tags .getBuckets ().size (), equalTo (0 )); // and this must be empty
451451 }
452+
453+ @ Test
454+ public void nestedSameDocIdProcessedMultipleTime () throws Exception {
455+ assertAcked (
456+ prepareCreate ("idx4" )
457+ .setSettings (ImmutableSettings .builder ().put (SETTING_NUMBER_OF_SHARDS , 1 ).put (SETTING_NUMBER_OF_REPLICAS , 0 ))
458+ .addMapping ("product" , "categories" , "type=string" , "name" , "type=string" , "property" , "type=nested" )
459+ );
460+
461+ client ().prepareIndex ("idx4" , "product" , "1" ).setSource (jsonBuilder ().startObject ()
462+ .field ("name" , "product1" )
463+ .field ("categories" , "1" , "2" , "3" , "4" )
464+ .startArray ("property" )
465+ .startObject ().field ("id" , 1 ).endObject ()
466+ .startObject ().field ("id" , 2 ).endObject ()
467+ .startObject ().field ("id" , 3 ).endObject ()
468+ .endArray ()
469+ .endObject ()).get ();
470+ client ().prepareIndex ("idx4" , "product" , "2" ).setSource (jsonBuilder ().startObject ()
471+ .field ("name" , "product2" )
472+ .field ("categories" , "1" , "2" )
473+ .startArray ("property" )
474+ .startObject ().field ("id" , 1 ).endObject ()
475+ .startObject ().field ("id" , 5 ).endObject ()
476+ .startObject ().field ("id" , 4 ).endObject ()
477+ .endArray ()
478+ .endObject ()).get ();
479+ refresh ();
480+
481+ SearchResponse response = client ().prepareSearch ("idx4" ).setTypes ("product" )
482+ .addAggregation (terms ("category" ).field ("categories" ).subAggregation (
483+ nested ("property" ).path ("property" ).subAggregation (
484+ terms ("property_id" ).field ("property.id" )
485+ )
486+ ))
487+ .get ();
488+ assertNoFailures (response );
489+ assertHitCount (response , 2 );
490+
491+ Terms category = response .getAggregations ().get ("category" );
492+ assertThat (category .getBuckets ().size (), equalTo (4 ));
493+
494+ Terms .Bucket bucket = category .getBucketByKey ("1" );
495+ assertThat (bucket .getDocCount (), equalTo (2l ));
496+ Nested property = bucket .getAggregations ().get ("property" );
497+ assertThat (property .getDocCount (), equalTo (6l ));
498+ Terms propertyId = property .getAggregations ().get ("property_id" );
499+ assertThat (propertyId .getBuckets ().size (), equalTo (5 ));
500+ assertThat (propertyId .getBucketByKey ("1" ).getDocCount (), equalTo (2l ));
501+ assertThat (propertyId .getBucketByKey ("2" ).getDocCount (), equalTo (1l ));
502+ assertThat (propertyId .getBucketByKey ("3" ).getDocCount (), equalTo (1l ));
503+ assertThat (propertyId .getBucketByKey ("4" ).getDocCount (), equalTo (1l ));
504+ assertThat (propertyId .getBucketByKey ("5" ).getDocCount (), equalTo (1l ));
505+
506+ bucket = category .getBucketByKey ("2" );
507+ assertThat (bucket .getDocCount (), equalTo (2l ));
508+ property = bucket .getAggregations ().get ("property" );
509+ assertThat (property .getDocCount (), equalTo (6l ));
510+ propertyId = property .getAggregations ().get ("property_id" );
511+ assertThat (propertyId .getBuckets ().size (), equalTo (5 ));
512+ assertThat (propertyId .getBucketByKey ("1" ).getDocCount (), equalTo (2l ));
513+ assertThat (propertyId .getBucketByKey ("2" ).getDocCount (), equalTo (1l ));
514+ assertThat (propertyId .getBucketByKey ("3" ).getDocCount (), equalTo (1l ));
515+ assertThat (propertyId .getBucketByKey ("4" ).getDocCount (), equalTo (1l ));
516+ assertThat (propertyId .getBucketByKey ("5" ).getDocCount (), equalTo (1l ));
517+
518+ bucket = category .getBucketByKey ("3" );
519+ assertThat (bucket .getDocCount (), equalTo (1l ));
520+ property = bucket .getAggregations ().get ("property" );
521+ assertThat (property .getDocCount (), equalTo (3l ));
522+ propertyId = property .getAggregations ().get ("property_id" );
523+ assertThat (propertyId .getBuckets ().size (), equalTo (3 ));
524+ assertThat (propertyId .getBucketByKey ("1" ).getDocCount (), equalTo (1l ));
525+ assertThat (propertyId .getBucketByKey ("2" ).getDocCount (), equalTo (1l ));
526+ assertThat (propertyId .getBucketByKey ("3" ).getDocCount (), equalTo (1l ));
527+
528+ bucket = category .getBucketByKey ("4" );
529+ assertThat (bucket .getDocCount (), equalTo (1l ));
530+ property = bucket .getAggregations ().get ("property" );
531+ assertThat (property .getDocCount (), equalTo (3l ));
532+ propertyId = property .getAggregations ().get ("property_id" );
533+ assertThat (propertyId .getBuckets ().size (), equalTo (3 ));
534+ assertThat (propertyId .getBucketByKey ("1" ).getDocCount (), equalTo (1l ));
535+ assertThat (propertyId .getBucketByKey ("2" ).getDocCount (), equalTo (1l ));
536+ assertThat (propertyId .getBucketByKey ("3" ).getDocCount (), equalTo (1l ));
537+ }
452538}
0 commit comments