|  | @@ -433,6 +433,102 @@ public class CompositeAggregatorTests  extends AggregatorTestCase {
 | 
	
		
			
				|  |  |          );
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    public void testUnmappedFieldWithLongs() throws Exception {
 | 
	
		
			
				|  |  | +        final List<Map<String, List<Object>>> dataset = new ArrayList<>();
 | 
	
		
			
				|  |  | +        dataset.addAll(
 | 
	
		
			
				|  |  | +            Arrays.asList(
 | 
	
		
			
				|  |  | +                createDocument("long", 1L),
 | 
	
		
			
				|  |  | +                createDocument("long", 3L),
 | 
	
		
			
				|  |  | +                createDocument("long", 1L),
 | 
	
		
			
				|  |  | +                createDocument("long", 4L),
 | 
	
		
			
				|  |  | +                createDocument("long", 3L)
 | 
	
		
			
				|  |  | +            )
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        testSearchCase(Arrays.asList(new MatchAllDocsQuery(), new DocValuesFieldExistsQuery("long")), dataset,
 | 
	
		
			
				|  |  | +            () -> new CompositeAggregationBuilder("name",
 | 
	
		
			
				|  |  | +                Arrays.asList(
 | 
	
		
			
				|  |  | +                    new TermsValuesSourceBuilder("unmapped").field("unmapped")
 | 
	
		
			
				|  |  | +                )
 | 
	
		
			
				|  |  | +            ),
 | 
	
		
			
				|  |  | +            (result) -> {
 | 
	
		
			
				|  |  | +                assertEquals(0, result.getBuckets().size());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        testSearchCase(Arrays.asList(new MatchAllDocsQuery(), new DocValuesFieldExistsQuery("long")), dataset,
 | 
	
		
			
				|  |  | +            () -> new CompositeAggregationBuilder("name",
 | 
	
		
			
				|  |  | +                Arrays.asList(
 | 
	
		
			
				|  |  | +                    new TermsValuesSourceBuilder("unmapped").field("unmapped").missingBucket(true)
 | 
	
		
			
				|  |  | +                )
 | 
	
		
			
				|  |  | +            ),
 | 
	
		
			
				|  |  | +            (result) -> {
 | 
	
		
			
				|  |  | +                assertEquals(1, result.getBuckets().size());
 | 
	
		
			
				|  |  | +                assertEquals("{unmapped=null}", result.afterKey().toString());
 | 
	
		
			
				|  |  | +                assertEquals("{unmapped=null}", result.getBuckets().get(0).getKeyAsString());
 | 
	
		
			
				|  |  | +                assertEquals(5L, result.getBuckets().get(0).getDocCount());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        testSearchCase(Arrays.asList(new MatchAllDocsQuery(), new DocValuesFieldExistsQuery("long")), dataset,
 | 
	
		
			
				|  |  | +            () -> new CompositeAggregationBuilder("name",
 | 
	
		
			
				|  |  | +                Arrays.asList(
 | 
	
		
			
				|  |  | +                    new TermsValuesSourceBuilder("unmapped").field("unmapped").missingBucket(true)
 | 
	
		
			
				|  |  | +                )).aggregateAfter(Collections.singletonMap("unmapped", null)),
 | 
	
		
			
				|  |  | +            (result) -> {
 | 
	
		
			
				|  |  | +                assertEquals(0, result.getBuckets().size());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        testSearchCase(Arrays.asList(new MatchAllDocsQuery(), new DocValuesFieldExistsQuery("long")), dataset,
 | 
	
		
			
				|  |  | +            () -> new CompositeAggregationBuilder("name",
 | 
	
		
			
				|  |  | +                Arrays.asList(
 | 
	
		
			
				|  |  | +                    new TermsValuesSourceBuilder("long").field("long"),
 | 
	
		
			
				|  |  | +                    new TermsValuesSourceBuilder("unmapped").field("unmapped")
 | 
	
		
			
				|  |  | +                )
 | 
	
		
			
				|  |  | +            ),
 | 
	
		
			
				|  |  | +            (result) -> {
 | 
	
		
			
				|  |  | +                assertEquals(0, result.getBuckets().size());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        testSearchCase(Arrays.asList(new MatchAllDocsQuery(), new DocValuesFieldExistsQuery("long")), dataset,
 | 
	
		
			
				|  |  | +            () -> new CompositeAggregationBuilder("name",
 | 
	
		
			
				|  |  | +                Arrays.asList(
 | 
	
		
			
				|  |  | +                    new TermsValuesSourceBuilder("long").field("long"),
 | 
	
		
			
				|  |  | +                    new TermsValuesSourceBuilder("unmapped").field("unmapped").missingBucket(true)
 | 
	
		
			
				|  |  | +                )
 | 
	
		
			
				|  |  | +            ),
 | 
	
		
			
				|  |  | +            (result) -> {
 | 
	
		
			
				|  |  | +                assertEquals(3, result.getBuckets().size());
 | 
	
		
			
				|  |  | +                assertEquals("{long=4, unmapped=null}", result.afterKey().toString());
 | 
	
		
			
				|  |  | +                assertEquals("{long=1, unmapped=null}", result.getBuckets().get(0).getKeyAsString());
 | 
	
		
			
				|  |  | +                assertEquals(2L, result.getBuckets().get(0).getDocCount());
 | 
	
		
			
				|  |  | +                assertEquals("{long=3, unmapped=null}", result.getBuckets().get(1).getKeyAsString());
 | 
	
		
			
				|  |  | +                assertEquals(2L, result.getBuckets().get(1).getDocCount());
 | 
	
		
			
				|  |  | +                assertEquals("{long=4, unmapped=null}", result.getBuckets().get(2).getKeyAsString());
 | 
	
		
			
				|  |  | +                assertEquals(1L, result.getBuckets().get(2).getDocCount());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        testSearchCase(Arrays.asList(new MatchAllDocsQuery(), new DocValuesFieldExistsQuery("long")), dataset,
 | 
	
		
			
				|  |  | +            () -> new CompositeAggregationBuilder("name",
 | 
	
		
			
				|  |  | +                Arrays.asList(
 | 
	
		
			
				|  |  | +                    new TermsValuesSourceBuilder("long").field("long"),
 | 
	
		
			
				|  |  | +                    new TermsValuesSourceBuilder("unmapped").field("unmapped").missingBucket(true)
 | 
	
		
			
				|  |  | +                )
 | 
	
		
			
				|  |  | +            ).aggregateAfter(Map.of("long", 1, "unmapped", randomFrom(randomBoolean(), 1, "b"))),
 | 
	
		
			
				|  |  | +            (result) -> {
 | 
	
		
			
				|  |  | +                assertEquals(2, result.getBuckets().size());
 | 
	
		
			
				|  |  | +                assertEquals("{long=4, unmapped=null}", result.afterKey().toString());
 | 
	
		
			
				|  |  | +                assertEquals("{long=3, unmapped=null}", result.getBuckets().get(0).getKeyAsString());
 | 
	
		
			
				|  |  | +                assertEquals(2L, result.getBuckets().get(0).getDocCount());
 | 
	
		
			
				|  |  | +                assertEquals("{long=4, unmapped=null}", result.getBuckets().get(1).getKeyAsString());
 | 
	
		
			
				|  |  | +                assertEquals(1L, result.getBuckets().get(1).getDocCount());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      public void testWithKeyword() throws Exception {
 | 
	
		
			
				|  |  |          final List<Map<String, List<Object>>> dataset = new ArrayList<>();
 | 
	
		
			
				|  |  |          dataset.addAll(
 |