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/06/08 18:57:52 UTC

lucene-solr:branch_6x: SOLR-10853:Allow the analyze Stream Evaluator to operate outside of a stream

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x efe4d727e -> fd9590170


SOLR-10853:Allow the analyze Stream Evaluator to operate outside of a stream


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/fd959017
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/fd959017
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/fd959017

Branch: refs/heads/branch_6x
Commit: fd95901708ec481c6e4ce01dd751f1a23460da00
Parents: efe4d72
Author: Joel Bernstein <jb...@apache.org>
Authored: Thu Jun 8 13:13:05 2017 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Thu Jun 8 14:53:55 2017 -0400

----------------------------------------------------------------------
 .../org/apache/solr/handler/AnalyzeEvaluator.java    | 11 ++++++++---
 solr/solr-ref-guide/src/stream-evaluators.adoc       | 14 ++++++++++++++
 .../solr/client/solrj/io/stream/TupStream.java       |  3 +--
 .../client/solrj/io/stream/StreamExpressionTest.java | 15 +++++++++++++++
 4 files changed, 38 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/fd959017/solr/core/src/java/org/apache/solr/handler/AnalyzeEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/AnalyzeEvaluator.java b/solr/core/src/java/org/apache/solr/handler/AnalyzeEvaluator.java
index c92f093..7c73498 100644
--- a/solr/core/src/java/org/apache/solr/handler/AnalyzeEvaluator.java
+++ b/solr/core/src/java/org/apache/solr/handler/AnalyzeEvaluator.java
@@ -54,6 +54,7 @@ public class AnalyzeEvaluator extends SimpleEvaluator {
   }
 
   public void setStreamContext(StreamContext context) {
+    this.streamContext = context;
     Object solrCoreObj = context.get("solr-core");
     if (solrCoreObj == null || !(solrCoreObj instanceof SolrCore) ) {
       throw new SolrException(SolrException.ErrorCode.INVALID_STATE, "StreamContext must have SolrCore in solr-core key");
@@ -74,9 +75,13 @@ public class AnalyzeEvaluator extends SimpleEvaluator {
 
   @Override
   public Object evaluate(Tuple tuple) throws IOException {
-    String value = tuple.getString(fieldName);
-    if(value == null) {
-      return null;
+    String value = null;
+    Object obj = tuple.get(fieldName);
+
+    if(obj == null) {
+      value = fieldName;
+    } else {
+      value = obj.toString();
     }
 
     List<String> tokens = new ArrayList();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/fd959017/solr/solr-ref-guide/src/stream-evaluators.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/stream-evaluators.adoc b/solr/solr-ref-guide/src/stream-evaluators.adoc
index 2c2a2ae..06c15df 100644
--- a/solr/solr-ref-guide/src/stream-evaluators.adoc
+++ b/solr/solr-ref-guide/src/stream-evaluators.adoc
@@ -20,6 +20,20 @@
 // specific language governing permissions and limitations
 // under the License.
 
+
+Stream evaluators are different the stream sources or stream decorators. Both
+streaming sources and stream decorators return streams of tuples.
+
+Stream evaluators are more like traditional functions that evaluates its parameters and
+returns an result. That result can be a single value, array, map or other structure.
+
+Stream evaluators can be nested to so that the output of evaluator becomes the input
+for another evaluatore.
+
+Stream evaluators can be called in different contexts. For example a stream evaluator
+can be called on its own or it can be called within the context of a streaming expression.
+
+
 == analyze
 
 // TODO

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/fd959017/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TupStream.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TupStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TupStream.java
index f099e31..855f05f 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TupStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TupStream.java
@@ -170,8 +170,7 @@ public class TupStream extends TupleStream implements Expressible {
       for(Entry<String,TupleStream> param : streamParams.entrySet()){
         
         try{
-          List<Tuple> streamTuples = new ArrayList<Tuple>();
-          
+          List<Tuple> streamTuples = new ArrayList();
           // open the stream, closed in finally block
           param.getValue().open();
           

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/fd959017/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 ecba153..dd8e7ff 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
@@ -5042,6 +5042,21 @@ public class StreamExpressionTest extends SolrCloudTestCase {
       assertTrue(t.getString("test_t").equals("c"));
       assertTrue(t.getString("id").equals("1"));
 
+
+      expr = "analyze(\"hello world\", test_t)";
+      paramsLoc = new ModifiableSolrParams();
+      paramsLoc.set("expr", expr);
+      paramsLoc.set("qt", "/stream");
+
+      solrStream = new SolrStream(url, paramsLoc);
+      context = new StreamContext();
+      solrStream.setStreamContext(context);
+      tuples = getTuples(solrStream);
+      assertEquals(tuples.size(), 1);
+      List terms = (List)tuples.get(0).get("return-value");
+      assertTrue(terms.get(0).equals("hello"));
+      assertTrue(terms.get(1).equals("world"));
+
       //Try with single param
       expr = "cartesianProduct(search("+COLLECTIONORALIAS+", q=\"*:*\", fl=\"id, test_t\", sort=\"id desc\"), analyze(test_t) as test_t)";
       paramsLoc = new ModifiableSolrParams();