[
https://issues.apache.org/jira/browse/SOLR-9916?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15803113#comment-15803113
]
Dennis Gove commented on SOLR-9916:
-----------------------------------
Looking at the current state of Operations, the following class structure exists
{code}
StreamOperation
ConcatOperation
BooleanOperation
AndOperation
LeafOperation
EqualsOperation
GreaterThanEqualToOperation
GreaterThanOperation
LessThanEqualToOperation
LessThanOperation
NotOperation
OrOperation
ReduceOperation
DistinctOperation
GroupOperation
ReplaceOperation (and associated hidden ReplaceWithFieldOperation,
ReplaceWithValueOperation)
{code}
I'd like to enhance this slightly to the following
{code}
StreamOperation
BooleanOperation
AndOperation
LeafOperation
EqualsOperation
GreaterThanEqualToOperation
GreaterThanOperation
LessThanEqualToOperation
LessThanOperation
NotOperation
OrOperation
ComparisonOperation
IfOperation
ModificationOperation
AbsoluteValueOperation
AdditionOperation
ConcatOperation
DivisionOperation
ModuloOperation
MultiplicationOperation
ReplaceOperation (and associated hidden ReplaceWithFieldOperation,
ReplaceWithValueOperation)
SubtractionOperation
ReduceOperation
DistinctOperation
GroupOperation
{code}
This will allow us to support arbitrarily complex operations in the Select
stream. It accomplishes this in 3 ways.
h3. Comparison Operation
First, add an if/then/else concept with the ComparisonOperation. Embedded
operations will be supported, either Modification or Comparison.
The full supported structure is
{code}
if(boolean, field | modification | comparison, field | modification |
comparison)
{code}
For example,
{code}
if(boolean(...), fieldA, fieldB)
ex: if(gt(a,b), a, b) // if a > b then a else b
if(boolean(...), modification(...), modification)
ex: if(gt(a,b), sub(a,b), sub(b,a)) // if a > b then a - b else b - a
if(boolean(...), comparison(...), comparison(...))
ex: if(gt(a,b), if(or(c,d), a, b), if(and(c,d), a, b)) // if a > b then (if c
or d then a else b) else (if c and d then a else b)
{code}
h3. ModificationOperations with Embedded Operations
Second, enhance ModificationOperations to support embedded operations, either
Modification or Comparison.
The full supported structure is
{code}
modification(field | modification | comparison [, field | modification |
comparison])
{code}
For example,
{code}
modification(fieldA [,fieldB])
ex: add(a,b) // a + b
modification(fieldA [,modification(...)]) // order doesn't matter
ex: add(a, div(b,c)) // a + (b/c)
add(div(b,c), a) // (b/c) + a
modification(fieldA [,comparison(...)]) // order doesn't matter
ex: add(a, if(gt(b,c),b,c)) // if b > c then a + b else a + c
add(if(gt(b,c),b,c), a) // if b > c then a + b else a + c
{code}
h3. BooleanOperations with Embedded Operations
Third, enhance BooleanOperations to support embedded operations, either
Modification or Comparison. Each would support the following constructs
The full supported structure is
{code}
boolean(field | modification | comparison [, field | modification | comparison])
{code}
{code}
boolean(fieldA [,fieldB])
ex: gt(a,b)
boolean(fieldA [,modification(...)]) // order doesn't matter
ex: gt(a, add(b,c)) // is a > (b + c)
gt(add(b,c), a) // is (b + c) > a
boolean(fieldA [,comparison(...)]) // order doesn't matter
ex: gt(a, if(gt(b,c),b,c)) // if b > c then is a > b else is a > c
gt(if(gt(b,c),b,c), a) // if b > c then is b > a else is c > a
{code}
----
[~joel.bernstein], I'm interested in your thoughts on this.
> Add arithmetic operations to the SelectStream
> ---------------------------------------------
>
> Key: SOLR-9916
> URL: https://issues.apache.org/jira/browse/SOLR-9916
> Project: Solr
> Issue Type: New Feature
> Security Level: Public(Default Security Level. Issues are Public)
> Reporter: Joel Bernstein
>
> One of the things that will be needed as the SQL implementation matures is
> the ability to do arithmetic operations. For example:
> select (a+b) from x;
> select sum(a)+sum(b) from x;
> We will need to support arithmetic operations within the Streaming API to
> support these types of operations.
> It looks like adding arithmetic operations to the SelectStream is the best
> place to add this functionality.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]