You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by da...@apache.org on 2018/10/31 05:07:33 UTC
[47/50] [abbrv] lucene-solr:jira/http2_benchmark: SOLR-12936: Allow
percentiles Stream Evaluator to accept an array of percentiles to calculate
SOLR-12936: Allow percentiles Stream Evaluator to accept an array of percentiles to calculate
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/ac192504
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/ac192504
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/ac192504
Branch: refs/heads/jira/http2_benchmark
Commit: ac1925045d137d4762c6cb5d6940bfec784bdd4f
Parents: e618e83
Author: Joel Bernstein <jb...@apache.org>
Authored: Mon Oct 29 16:29:04 2018 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Mon Oct 29 16:29:04 2018 -0400
----------------------------------------------------------------------
.../solrj/io/eval/PercentileEvaluator.java | 25 ++++++++++++++------
.../solrj/io/stream/MathExpressionTest.java | 17 +++++++++++++
2 files changed, 35 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ac192504/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
index b545f4b..63fce52 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
@@ -17,6 +17,7 @@
package org.apache.solr.client.solrj.io.eval;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -39,16 +40,26 @@ public class PercentileEvaluator extends RecursiveNumericEvaluator implements Tw
if(null == second){
throw new IOException(String.format(Locale.ROOT,"Invalid expression %s - null found for the second value",toExpression(constructingFactory)));
}
- if(!(first instanceof List<?>)){
+ if(!(first instanceof List<?>)) {
throw new IOException(String.format(Locale.ROOT,"Invalid expression %s - found type %s for the first value, expecting a List",toExpression(constructingFactory), first.getClass().getSimpleName()));
}
- if(!(second instanceof Number)){
- throw new IOException(String.format(Locale.ROOT,"Invalid expression %s - found type %s for the second value, expecting a Number",toExpression(constructingFactory), first.getClass().getSimpleName()));
+ if((second instanceof Number)) {
+ Percentile percentile = new Percentile();
+ percentile.setData(((List<?>) first).stream().mapToDouble(value -> ((Number) value).doubleValue()).toArray());
+ return percentile.evaluate(((Number) second).doubleValue());
+ } else if(second instanceof List){
+ Percentile percentile = new Percentile();
+ percentile.setData(((List<?>) first).stream().mapToDouble(value -> ((Number) value).doubleValue()).toArray());
+ List<Number> values = (List<Number>) second;
+ List<Number> percentiles = new ArrayList();
+ for(Number value : values) {
+ percentiles.add(percentile.evaluate(value.doubleValue()));
+ }
+
+ return percentiles;
+ } else {
+ throw new IOException(String.format(Locale.ROOT,"Invalid expression %s - found type %s for the second value, expecting a number or a numeric array",toExpression(constructingFactory), first.getClass().getSimpleName()));
}
-
- Percentile percentile = new Percentile();
- percentile.setData(((List<?>)first).stream().mapToDouble(value -> ((Number)value).doubleValue()).toArray());
- return percentile.evaluate(((Number)second).doubleValue());
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ac192504/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/MathExpressionTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/MathExpressionTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/MathExpressionTest.java
index 2bff1ab..b5f9c0a 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/MathExpressionTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/MathExpressionTest.java
@@ -985,6 +985,23 @@ public class MathExpressionTest extends SolrCloudTestCase {
tuple = tuples.get(0);
p = tuple.getDouble("return-value");
assertEquals(p, 2.4, 0.001);
+
+
+ cexpr = "percentile(array(11,10,3,4,5,6,7,8,9,2,1), array(20, 50))";
+ paramsLoc = new ModifiableSolrParams();
+ paramsLoc.set("expr", cexpr);
+ paramsLoc.set("qt", "/stream");
+
+ solrStream = new SolrStream(url, paramsLoc);
+
+ context = new StreamContext();
+ solrStream.setStreamContext(context);
+ tuples = getTuples(solrStream);
+ assertTrue(tuples.size() == 1);
+ tuple = tuples.get(0);
+ List<Number> percentiles = (List<Number>)tuple.get("return-value");
+ assertEquals(percentiles.get(0).doubleValue(), 2.4, 0.001);
+ assertEquals(percentiles.get(1).doubleValue(), 6.0, 0.001);
}
@Test