You're correct, after testing again the only way that this works correctly
appears to be:

intersect(
 cartesianProduct(tuple(fieldA=array(a,b,c,c)), fieldA, productSort="fieldA
asc"),
 cartesianProduct(tuple(fieldA=array(a,c)), fieldA, productSort="fieldA
asc"),
 on="fieldA"
 )

I suspect that there are only test cases that cover this scenario as well.
I'll create a jira issue for this.




Joel Bernstein
http://joelsolr.blogspot.com/

On Fri, Jun 8, 2018 at 3:41 AM, Christian Spitzlay <
christian.spitz...@biologis.com> wrote:

> Hi,
>
>
> > Am 08.06.2018 um 03:42 schrieb Joel Bernstein <joels...@gmail.com>:
> >
> > And when you transpose the "on" fields like this:
> >
> > intersect(
> > cartesianProduct(tuple(fieldA=array(a,b,c,c)), fieldA,
> productSort="fieldA
> > asc"),
> > cartesianProduct(tuple(fieldB=array(a,c)), fieldB, productSort="fieldB
> > asc"),
> > on="fieldB=fieldA"
> > )
> >
> > It also works.
>
>
> No, IIUC this does not work correctly.
>
> I had tried this before posting my original question.
> That version emits the documents from the left stream
> but does not filter out the document with fieldA == b.
>
> This might be due to the fact that fieldB is not present in the left stream
> and fieldA is not present in the right stream; it compares two
> empty values (null?) and comes to the conclusion that they are equal.
> Could that be the reason?
>
>
>
> > So, yes there is a bug where the fields are being transposed with
> intersect
> > function's "on" fields. The same issue was happening with joins and may
> > have been resolved. I'll do little more research into this.
>
> Thanks for your work on this!
>
>
> Best regards
> Christian Spitzlay
>
>
>
>
>
> > Joel Bernstein
> > http://joelsolr.blogspot.com/
> >
> > On Thu, Jun 7, 2018 at 9:29 AM, Christian Spitzlay <
> > christian.spitz...@biologis.com> wrote:
> >
> >>
> >>
> >>> Am 07.06.2018 um 11:34 schrieb Christian Spitzlay <
> >> christian.spitz...@biologis.com>:
> >>>
> >>> intersect(
> >>> cartesianProduct(tuple(fieldA=array(a,b,c,c)), fieldA,
> >> productSort="fieldA asc"),
> >>> cartesianProduct(tuple(fieldB=array(a,c)), fieldB, productSort="fieldB
> >> asc"),
> >>> on="fieldA=fieldB"
> >>> )
> >>>
> >>> I simplified it a bit, too. I still get one document with fieldA == a.
> >>> I would have expected three documents in the output, one with fieldA ==
> >> a and two with fieldB == c.
> >>
> >> That should have read ā€žā€¦ and two with fieldA == cā€œ of course.
> >>
> >>
> >>
> >>
>
>

Reply via email to