1
1
package org .nlpcn .es4sql .query .maker ;
2
2
3
+ import java .math .BigDecimal ;
3
4
import java .util .ArrayList ;
4
5
import java .util .HashMap ;
5
6
import java .util .LinkedList ;
23
24
import org .elasticsearch .search .aggregations .bucket .terms .TermsBuilder ;
24
25
import org .elasticsearch .search .aggregations .metrics .ValuesSourceMetricsAggregationBuilder ;
25
26
import org .elasticsearch .search .aggregations .metrics .geobounds .GeoBoundsBuilder ;
27
+ import org .elasticsearch .search .aggregations .metrics .percentiles .PercentilesBuilder ;
26
28
import org .elasticsearch .search .aggregations .metrics .scripted .ScriptedMetricBuilder ;
27
29
import org .elasticsearch .search .aggregations .metrics .tophits .TopHitsBuilder ;
28
30
import org .elasticsearch .search .sort .SortOrder ;
@@ -96,6 +98,7 @@ public AbstractAggregationBuilder makeFieldAgg(MethodField field, AbstractAggreg
96
98
return addFieldToAgg (field , builder );
97
99
case "PERCENTILES" :
98
100
builder = AggregationBuilders .percentiles (field .getAlias ());
101
+ addSpecificPercentiles ((PercentilesBuilder ) builder ,field .getParams ());
99
102
return addFieldToAgg (field , builder );
100
103
case "TOPHITS" :
101
104
return makeTopHitsAgg (field );
@@ -109,6 +112,26 @@ public AbstractAggregationBuilder makeFieldAgg(MethodField field, AbstractAggreg
109
112
}
110
113
}
111
114
115
+ private void addSpecificPercentiles (PercentilesBuilder percentilesBuilder , List <KVValue > params ) {
116
+ List <Double > percentiles = new ArrayList <>();
117
+ for (KVValue kValue : params ){
118
+ if (kValue .value .getClass ().equals (BigDecimal .class )){
119
+ BigDecimal percentile = (BigDecimal ) kValue .value ;
120
+ percentiles .add (percentile .doubleValue ());
121
+
122
+ }
123
+ }
124
+ if (percentiles .size () > 0 ) {
125
+ double [] percentilesArr = new double [percentiles .size ()];
126
+ int i =0 ;
127
+ for (Double percentile : percentiles ){
128
+ percentilesArr [i ] = percentile ;
129
+ i ++;
130
+ }
131
+ percentilesBuilder .percentiles (percentilesArr );
132
+ }
133
+ }
134
+
112
135
private String fixAlias (String alias ) {
113
136
//because [ is not legal as alias
114
137
return alias .replaceAll ("\\ [" ,"(" ).replaceAll ("\\ ]" ,")" );
0 commit comments