[ https://issues.apache.org/jira/browse/SOLR-11600?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16260797#comment-16260797 ]
Amrit Sarkar edited comment on SOLR-11600 at 11/21/17 2:34 PM: --------------------------------------------------------------- Thank you [~joel.bernstein] for the explanation; bq. 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 I completely understand this by the following example {code} replace( fieldA, add( fieldB, if( eq(fieldC,0), 0, 1))) {code} This nested evaluation and operation is not possible to create with current Java constructors available, as the constructors of evaluators and operations have most just one type of constructor with {{StreamExpression}} (StreamExpressionParameter interface) parameter which the evaluators or operators doesn't implement (they implement Expressible interface). {code} public AddEvaluator(StreamExpression expression, StreamFactory factory) throws IOException{ super(expression, factory); if(containedEvaluators.size() < 1){ throw new IOException(String.format(Locale.ROOT,"Invalid expression %s - expecting at least one value but found %d",expression,containedEvaluators.size())); } } {code} To accomodate the above request, strongly types java objects for all, we need to create rule-based constructors for all the evaluators and operators, so that those can be used in {{SelectStream}}. was (Author: sarkaramr...@gmail.com): Thank you [~joel.bernstein] for the explanation; > 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 I completely understand this by the following example {code} replace( fieldA, add( fieldB, if( eq(fieldC,0), 0, 1))) {code} This nested evaluation and operation is not possible to create with current Java constructors available, as the constructors of evaluators and operations have most just one type of constructor with {{StreamExpression}} (StreamExpressionParameter interface) parameter which the evaluators or operators doesn't implement (they implement Expressible interface). {code} public AddEvaluator(StreamExpression expression, StreamFactory factory) throws IOException{ super(expression, factory); if(containedEvaluators.size() < 1){ throw new IOException(String.format(Locale.ROOT,"Invalid expression %s - expecting at least one value but found %d",expression,containedEvaluators.size())); } } {code} To accomodate the above request, strongly types java objects for all, we need to create rule-based constructors for all the evaluators and operators, so that those can be used in {{SelectStream}}. > 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