Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e56a983

Browse files
committed
Merge commit 'feb2b1eec9e98ebe2ced29a61100ee97f3505b87' into elastic2.0
Conflicts: src/main/java/org/nlpcn/es4sql/query/maker/AggMaker.java
2 parents 0f69172 + feb2b1e commit e56a983

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

src/main/java/org/nlpcn/es4sql/query/maker/AggMaker.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.nlpcn.es4sql.query.maker;
22

3+
import java.math.BigDecimal;
34
import java.util.ArrayList;
45
import java.util.HashMap;
56
import java.util.LinkedList;
@@ -23,6 +24,7 @@
2324
import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder;
2425
import org.elasticsearch.search.aggregations.metrics.ValuesSourceMetricsAggregationBuilder;
2526
import org.elasticsearch.search.aggregations.metrics.geobounds.GeoBoundsBuilder;
27+
import org.elasticsearch.search.aggregations.metrics.percentiles.PercentilesBuilder;
2628
import org.elasticsearch.search.aggregations.metrics.scripted.ScriptedMetricBuilder;
2729
import org.elasticsearch.search.aggregations.metrics.tophits.TopHitsBuilder;
2830
import org.elasticsearch.search.sort.SortOrder;
@@ -96,6 +98,7 @@ public AbstractAggregationBuilder makeFieldAgg(MethodField field, AbstractAggreg
9698
return addFieldToAgg(field, builder);
9799
case "PERCENTILES":
98100
builder = AggregationBuilders.percentiles(field.getAlias());
101+
addSpecificPercentiles((PercentilesBuilder) builder,field.getParams());
99102
return addFieldToAgg(field, builder);
100103
case "TOPHITS":
101104
return makeTopHitsAgg(field);
@@ -109,6 +112,26 @@ public AbstractAggregationBuilder makeFieldAgg(MethodField field, AbstractAggreg
109112
}
110113
}
111114

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+
112135
private String fixAlias(String alias) {
113136
//because [ is not legal as alias
114137
return alias.replaceAll("\\[","(").replaceAll("\\]",")");

src/test/java/org/nlpcn/es4sql/AggregationTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,14 @@ public void percentileTest() throws IOException, SqlParseException, SQLFeatureNo
178178
Assert.assertTrue(Math.abs(percentiles.percentile(99.0) - 40.0) < 0.001 );
179179
}
180180

181+
@Test
182+
public void percentileTestSpecific() throws IOException, SqlParseException, SQLFeatureNotSupportedException {
183+
Aggregations result = query(String.format("SELECT PERCENTILES(age,25.0,75.0) x FROM %s/account", TEST_INDEX));
184+
Percentiles percentiles = result.get("x");
185+
Assert.assertTrue(Math.abs(percentiles.percentile(25.0) - 25.0) < 0.001 );
186+
Assert.assertTrue(Math.abs(percentiles.percentile(75.0) - 35.0) < 0.001 );
187+
}
188+
181189
@Test
182190
public void aliasTest() throws IOException, SqlParseException, SQLFeatureNotSupportedException {
183191
Aggregations result = query(String.format("SELECT COUNT(*) AS mycount FROM %s/account", TEST_INDEX));

0 commit comments

Comments
 (0)