[ 
https://issues.apache.org/jira/browse/SOLR-11600?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16261446#comment-16261446
 ] 

Joel Bernstein edited comment on SOLR-11600 at 11/21/17 8:31 PM:
-----------------------------------------------------------------

There is an approach in Java that you can use to build the expressions so you 
don't have to use the strings directly.

The approach is to use the StreamExpression classes to construct the expression:

StreamExpression
StreamExpressionParameter
StreamExpressionNamedParameter
StreamExpressionValue

If you take a look at the toExpression method of many of the Streams you'll see 
how a TupleStream turns itself to a StreamExpression.

You can think of Streaming Expressions as having three representations:

1) String Expression: used as the query language and serialization format.
2) StreamExpression: intermediate format that can become a string a TupleStream
3) TupleStream: these are the compiled stream objects.

At Alfresco we have code that uses the StreamExpression classes to build 
expressions and compile them to TupleStreams. This has worked quite well for us.









was (Author: joel.bernstein):
There is an approach in Java that you can use to build the expressions so you 
don't have to use the strings directly.

The approach is to use the StreamExpression classes to construct the expression:

StreamExpression
StreamExpressionParameter
StreamExpressionNamedParameter
StreamExpressionValue

If you take a look at the toExpression method of many of the Streams you'll see 
how TupleStream turns itself to a StreamExpression.

You can think of Streaming Expressions as having three representations:

1) String Expression: used as the query language and serialization format.
2) StreamExpression: intermediate format that can become a string a TupleStream
3) TupleStream: these are the compiled stream objects.

At Alfresco we have code that uses the StreamExpression classes to build 
expressions and compile them to TupleStreams. This has worked quite well for us.








> Add Constructor to SelectStream which takes StreamEvaluators as argument. 
> Current schema forces one to enter a stream expression string only 
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: SOLR-11600
>                 URL: https://issues.apache.org/jira/browse/SOLR-11600
>             Project: Solr
>          Issue Type: Improvement
>      Security Level: Public(Default Security Level. Issues are Public) 
>          Components: SolrJ, streaming expressions
>    Affects Versions: 6.6.1, 7.1
>            Reporter: Aroop
>            Priority: Trivial
>              Labels: easyfix
>         Attachments: SOLR-11600.patch
>
>
> The use case is to be able able to supply stream evaluators over a rollup 
> stream in the following manner, but with instead with Strongly typed objects 
> and not steaming-expression strings.
> {code:bash}
> curl --data-urlencode 'expr=select(
> id,
> div(sum(cat1_i),sum(cat2_i)) as metric1,
> coalesce(div(sum(cat1_i),if(eq(sum(cat2_i),0),null,sum(cat2_i))),0) as 
> metric2,
> rollup(
> search(col1, q=*:*, fl="id,cat1_i,cat2_i,cat_s", qt="/export", sort="cat_s 
> asc"),
> over="cat_s",sum(cat1_i),sum(cat2_i)
> ))' http://localhost:8983/solr/col1/stream
> {code}
> the current code base does not allow one to provide selectedEvaluators in a 
> constructor, so one cannot prepare their select stream via java code:
> {code:java}
> public class SelectStream extends TupleStream implements Expressible {
>     private static final long serialVersionUID = 1L;
>     private TupleStream stream;
>     private StreamContext streamContext;
>     private Map<String, String> selectedFields;
>     private Map<StreamEvaluator, String> selectedEvaluators;
>     private List<StreamOperation> operations;
>     public SelectStream(TupleStream stream, List<String> selectedFields) 
> throws IOException {
>         this.stream = stream;
>         this.selectedFields = new HashMap();
>         Iterator var3 = selectedFields.iterator();
>         while(var3.hasNext()) {
>             String selectedField = (String)var3.next();
>             this.selectedFields.put(selectedField, selectedField);
>         }
>         this.operations = new ArrayList();
>         this.selectedEvaluators = new HashMap();
>     }
>     public SelectStream(TupleStream stream, Map<String, String> 
> selectedFields) throws IOException {
>         this.stream = stream;
>         this.selectedFields = selectedFields;
>         this.operations = new ArrayList();
>         this.selectedEvaluators = new HashMap();
>     }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to