That looks great!  I love how (relatively) simple it all is to write your own 
logic.

One of the reasons that we added packages (bin/solr package) to Solr is so that 
if someone wants to add something like a java() evaluator, they can!

> On Jan 4, 2022, at 11:40 AM, Damiano Albani <damiano.alb...@gmail.com> wrote:
> 
> Hi,
> 
> Just a quick note to mention that I've managed to implement what I wanted
> in terms of non equi-joins.
> Should someone be interested, I've put my code on
> https://github.com/dalbani/solr-streaming-expressions.
> 
> By the way, I happened to need a startsWith function and I implemented it
> quite easily.
> But I'm wondering if a very generic -- if not possibly not very safe --
> java() evaluator could be built.
> That would open streaming expressions to the whole Java API instead of
> having to write individual evaluators.
> For the example of startsWith, it could look like something in the range of:
> 
>> java(val(Hello), val(World), "arg0.startsWith(arg1)")
> 
> Using say, https://www.javassist.org/, to turn the code argument into
> bytecode.
> What do you think?
> 
> Regards,
> 
> On Wed, Dec 29, 2021 at 12:39 PM Damiano Albani <damiano.alb...@gmail.com>
> wrote:
> 
>> Hello,
>> 
>> I'm new to streaming expressions, so I'm trying to understand their
>> features and limitations.
>> In particular the so-called "stream operators" implementing join
>> operations.
>> Like "innerJoin", "leftOuterJoin", etc.
>> 
>> I see that they support a "on" parameter, defining the *equality* check
>> to be performed.
>> But, coming from the SQL world, I'm used to being able to use a variety of
>> comparison operators in join predicates. That is, not only equality, as in
>> "equi-joins".
>> 
>> Is there a reason why the current implementation of Solr supports
>> equi-joins only? Would it be technically possible (and desired) to support
>> other comparison operators with joins?
>> And maybe somehow allow the use of the available stream evaluators
>> <https://solr.apache.org/guide/8_11/stream-evaluator-reference.html>?
>> 
>> To give the context of my question: I'm trying to join 2 sets of documents
>> with a hierarchical relationship.
>> My goal is to join them using a "path" field on one side and
>> "descendent_path" field on the other side.
>> But it looks like that only doc values are accessible (and not analyzed
>> ones) in streams, so I suppose I'd be left with a join criteria like this
>> pseudo-code:
>> 
>>>  on="starts_with(right.path, left.path)"
>> 
>> Where, in this hypothetical example:
>> 
>>>  left.path=/categories/category1"
>>>  right.path=/categories/category1/sub-categories/sub-category-a"
>> 
>> 
>> Or do I completely misunderstand how Solr (streams) work? ;-)
>> Thanks for your help!
>> 
>> Regards,
>> 
>> --
>> Damiano Albani
>> 
> 
> 
> -- 
> Damiano Albani

_______________________
Eric Pugh | Founder & CEO | OpenSource Connections, LLC | 434.466.1467 | 
http://www.opensourceconnections.com <http://www.opensourceconnections.com/> | 
My Free/Busy <http://tinyurl.com/eric-cal>  
Co-Author: Apache Solr Enterprise Search Server, 3rd Ed 
<https://www.packtpub.com/big-data-and-business-intelligence/apache-solr-enterprise-search-server-third-edition-raw>
    
This e-mail and all contents, including attachments, is considered to be 
Company Confidential unless explicitly stated otherwise, regardless of whether 
attachments are marked as such.

Reply via email to