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

Joel Bernstein commented on SOLR-11600:
---------------------------------------

Some of early Streaming API class have constructors that can be used directly. 
The current direction though is to move away from people using the Streaming 
API java classes directly. This is mainly because it's just too difficult to 
support the java classes directly because it doubles the documentation, tests 
etc...

It's also quite tricky to actually use the Java API directly and Streaming 
Expressions are much easier to work with. 

One of the things to consider is looking at where the Streaming Expressions can 
become more type safe. Each expression has it's own set of rules for the 
parameters that it accepts so we can get very specific with how type safety is 
handled. We could also add a command to the /stream handler to just compile the 
expression and not run, to see what errors occur at compile time.



> 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