2020package  org .elasticsearch .search .aggregations .metrics ;
2121
2222import  org .elasticsearch .index .query .QueryShardContext ;
23+ import  org .elasticsearch .search .aggregations .AggregationExecutionException ;
2324import  org .elasticsearch .search .aggregations .Aggregator ;
2425import  org .elasticsearch .search .aggregations .AggregatorFactories ;
2526import  org .elasticsearch .search .aggregations .AggregatorFactory ;
2627import  org .elasticsearch .search .aggregations .pipeline .PipelineAggregator ;
28+ import  org .elasticsearch .search .aggregations .support .AggregatorSupplier ;
2729import  org .elasticsearch .search .aggregations .support .ValuesSource ;
2830import  org .elasticsearch .search .aggregations .support .ValuesSourceAggregatorFactory ;
2931import  org .elasticsearch .search .aggregations .support .ValuesSourceConfig ;
32+ import  org .elasticsearch .search .aggregations .support .ValuesSourceRegistry ;
3033import  org .elasticsearch .search .internal .SearchContext ;
3134
3235import  java .io .IOException ;
@@ -47,6 +50,25 @@ class CardinalityAggregatorFactory extends ValuesSourceAggregatorFactory {
4750        this .precisionThreshold  = precisionThreshold ;
4851    }
4952
53+     static  void  registerAggregators (ValuesSourceRegistry  valuesSourceRegistry ) {
54+         valuesSourceRegistry .register (CardinalityAggregationBuilder .NAME , (ignored ) -> true , cardinalityAggregatorSupplier ());
55+     }
56+ 
57+     private  static  CardinalityAggregatorSupplier  cardinalityAggregatorSupplier (){
58+         return  new  CardinalityAggregatorSupplier () {
59+             @ Override 
60+             public  Aggregator  build (String  name ,
61+                                     ValuesSource  valuesSource ,
62+                                     int  precision ,
63+                                     SearchContext  context ,
64+                                     Aggregator  parent ,
65+                                     List <PipelineAggregator > pipelineAggregators ,
66+                                     Map <String , Object > metaData ) throws  IOException  {
67+                 return  new  CardinalityAggregator (name , valuesSource , precision , context , parent , pipelineAggregators , metaData );
68+             }
69+         };
70+     }
71+ 
5072    @ Override 
5173    protected  Aggregator  createUnmapped (SearchContext  searchContext ,
5274                                            Aggregator  parent ,
@@ -62,8 +84,14 @@ protected Aggregator doCreateInternal(ValuesSource valuesSource,
6284                                            boolean  collectsFromSingleBucket ,
6385                                            List <PipelineAggregator > pipelineAggregators ,
6486                                            Map <String , Object > metaData ) throws  IOException  {
65-         return  new  CardinalityAggregator (name , valuesSource , precision (), searchContext , parent , pipelineAggregators ,
66-                 metaData );
87+         AggregatorSupplier  aggregatorSupplier  = ValuesSourceRegistry .getInstance ().getAggregator (config .valueSourceType (),
88+             CardinalityAggregationBuilder .NAME );
89+         if  (aggregatorSupplier  instanceof  CardinalityAggregatorSupplier  == false ) {
90+             throw  new  AggregationExecutionException ("Registry miss-match - expected CardinalityAggregatorSupplier, found ["  +
91+                 aggregatorSupplier .getClass ().toString () + "]" );
92+         }
93+         CardinalityAggregatorSupplier  cardinalityAggregatorSupplier  = (CardinalityAggregatorSupplier ) aggregatorSupplier ;
94+         return  cardinalityAggregatorSupplier .build (name , valuesSource , precision (), searchContext , parent , pipelineAggregators , metaData );
6795    }
6896
6997    private  int  precision () {
0 commit comments