You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jb...@apache.org on 2017/08/08 18:54:09 UTC
lucene-solr:master: SOLR-11212: Allow the predict StreamEvaluator to
work on arrays as well as a single numeric parameter
Repository: lucene-solr
Updated Branches:
refs/heads/master 2a8930cf8 -> ea85543ac
SOLR-11212: Allow the predict StreamEvaluator to work on arrays as well as a single numeric parameter
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/ea85543a
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/ea85543a
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/ea85543a
Branch: refs/heads/master
Commit: ea85543aced4fbdc7f4a82e6ea67e74998c898c9
Parents: 2a8930c
Author: Joel Bernstein <jb...@apache.org>
Authored: Tue Aug 8 14:53:45 2017 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Tue Aug 8 14:53:45 2017 -0400
----------------------------------------------------------------------
.../client/solrj/io/eval/PredictEvaluator.java | 20 ++++++++++++++++----
.../solrj/io/stream/StreamExpressionTest.java | 4 +++-
2 files changed, 19 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ea85543a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PredictEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PredictEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PredictEvaluator.java
index af8a7f0..ed9034a 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PredictEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PredictEvaluator.java
@@ -19,6 +19,8 @@ package org.apache.solr.client.solrj.io.eval;
import java.io.IOException;
import java.util.Locale;
+import java.util.List;
+import java.util.ArrayList;
import org.apache.solr.client.solrj.io.Tuple;
import org.apache.solr.client.solrj.io.stream.expr.Explanation;
@@ -38,17 +40,27 @@ public class PredictEvaluator extends ComplexEvaluator implements Expressible {
if(2 != subEvaluators.size()){
throw new IOException(String.format(Locale.ROOT,"Invalid expression %s - expecting two values (regression result and a number) but found %d",expression,subEvaluators.size()));
}
-
}
- public Number evaluate(Tuple tuple) throws IOException {
+ public Object evaluate(Tuple tuple) throws IOException {
StreamEvaluator r = subEvaluators.get(0);
StreamEvaluator d = subEvaluators.get(1);
RegressionEvaluator.RegressionTuple rt= (RegressionEvaluator.RegressionTuple)r.evaluate(tuple);
- Number n = (Number)d.evaluate(tuple);
- return rt.predict(n.doubleValue());
+
+ Object o = d.evaluate(tuple);
+ if(o instanceof Number) {
+ Number n = (Number)o;
+ return rt.predict(n.doubleValue());
+ } else {
+ List<Number> list = (List<Number>)o;
+ List<Number> predications = new ArrayList();
+ for(Number n : list) {
+ predications.add(rt.predict(n.doubleValue()));
+ }
+ return predications;
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ea85543a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
index 699a562..93e5287 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
@@ -6270,7 +6270,7 @@ public class StreamExpressionTest extends SolrCloudTestCase {
String expr1 = "search("+COLLECTIONORALIAS+", q=\"col_s:a\", fl=\"price_f, order_i\", sort=\"order_i asc\")";
String expr2 = "search("+COLLECTIONORALIAS+", q=\"col_s:b\", fl=\"price_f, order_i\", sort=\"order_i asc\")";
- String cexpr = "let(a="+expr1+", b="+expr2+", c=col(a, price_f), d=col(b, price_f), e=regress(c, d), tuple(regress=e, p=predict(e, 300)))";
+ String cexpr = "let(a="+expr1+", b="+expr2+", c=col(a, price_f), d=col(b, price_f), e=regress(c, d), tuple(regress=e, p=predict(e, 300), pl=predict(e, c)))";
ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
paramsLoc.set("expr", cexpr);
@@ -6293,6 +6293,8 @@ public class StreamExpressionTest extends SolrCloudTestCase {
assertTrue(rSquare == 1.0D);
double prediction = tuple.getDouble("p");
assertTrue(prediction == 600.0D);
+ List<Number> predictions = (List<Number>)tuple.get("pl");
+ assertList(predictions, 200.0, 400.0, 600.0, 200.0, 400.0, 800.0, 1200.0);
}