Hi Joel, I have submitted a patch to handle this. Please review.
https://issues.apache.org/jira/secure/attachment/12874681/SOLR-10944.patch Thanks, Susheel On Fri, Jun 23, 2017 at 12:32 PM, Susheel Kumar <susheel2...@gmail.com> wrote: > Thanks for confirming. Here is the JIRA > > https://issues.apache.org/jira/browse/SOLR-10944 > > On Fri, Jun 23, 2017 at 11:20 AM, Joel Bernstein <joels...@gmail.com> > wrote: > >> yeah, this looks like a bug in the get expression. >> >> Joel Bernstein >> http://joelsolr.blogspot.com/ >> >> On Fri, Jun 23, 2017 at 11:07 AM, Susheel Kumar <susheel2...@gmail.com> >> wrote: >> >> > Hi Joel, >> > >> > As i am getting deeper, it doesn't look like a problem due to hashJoin >> etc. >> > >> > >> > Below is a simple let expr where if search would not find a match and >> > return 0 result. In that case, I would expect get(a) to show a EOF >> tuple >> > while it is throwing exception. It looks like something wrong/bug in the >> > code. Please suggest >> > >> > === >> > let(a=search(collection1, >> > q=id:999999999, >> > fl="id,business_email", >> > sort="business_email asc"), >> > get(a) >> > ) >> > >> > >> > { >> > "result-set": { >> > "docs": [ >> > { >> > "EXCEPTION": "Index: 0, Size: 0", >> > "EOF": true, >> > "RESPONSE_TIME": 8 >> > } >> > ] >> > } >> > } >> > >> > >> > >> > >> > >> > >> > >> > On Fri, Jun 23, 2017 at 7:44 AM, Joel Bernstein <joels...@gmail.com> >> > wrote: >> > >> > > Ok, I hadn't anticipated some of the scenarios that you've been trying >> > out. >> > > Particularly reading streams into variables and performing joins >> etc... >> > > >> > > The main idea with variables was to use them with the new statistical >> > > evaluators. So you perform retrievals (search, random, nodes, knn >> etc...) >> > > set the results to variables and then perform statistical analysis. >> > > >> > > The problem with joining variables is that is doesn't scale very well >> > > because all the records are read into memory. Also the parallel stream >> > > won't work over variables. >> > > >> > > Joel Bernstein >> > > http://joelsolr.blogspot.com/ >> > > >> > > On Thu, Jun 22, 2017 at 3:50 PM, Susheel Kumar <susheel2...@gmail.com >> > >> > > wrote: >> > > >> > > > Hi Joel, >> > > > >> > > > I am able to reproduce this in a simple way. Looks like Let Stream >> is >> > > > having some issues. Below complement function works fine if I >> execute >> > > > outside let and returns an EOF:true tuple but if a tuple with >> EOF:true >> > > > assigned to let variable, it gets changed to EXCEPTION "Index 0, >> Size >> > 0" >> > > > etc. >> > > > >> > > > So let stream not able to handle the stream/results which has only >> EOF >> > > > tuple and breaks the whole let expression block >> > > > >> > > > >> > > > ===Complement inside let >> > > > let( >> > > > a=echo(Hello), >> > > > b=complement(sort(select(tuple(id=1,email="A"),id,email),by="id >> > > asc,email >> > > > asc"), >> > > > sort(select(tuple(id=1,email="A"),id,email),by="id asc,email asc"), >> > > > on="id,email"), >> > > > c=get(b), >> > > > get(a) >> > > > ) >> > > > >> > > > Result >> > > > === >> > > > { >> > > > "result-set": { >> > > > "docs": [ >> > > > { >> > > > "EXCEPTION": "Index: 0, Size: 0", >> > > > "EOF": true, >> > > > "RESPONSE_TIME": 1 >> > > > } >> > > > ] >> > > > } >> > > > } >> > > > >> > > > ===Complement outside let >> > > > >> > > > complement(sort(select(tuple(id=1,email="A"),id,email),by="id >> > asc,email >> > > > asc"), >> > > > sort(select(tuple(id=1,email="A"),id,email),by="id asc,email asc"), >> > > > on="id,email") >> > > > >> > > > Result >> > > > === >> > > > { "result-set": { "docs": [ { "EOF": true, "RESPONSE_TIME": 0 } ] } >> } >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > On Thu, Jun 22, 2017 at 11:55 AM, Susheel Kumar < >> susheel2...@gmail.com >> > > >> > > > wrote: >> > > > >> > > > > Sorry for typo >> > > > > >> > > > > Facing a weird behavior when using hashJoin / innerJoin etc. The >> > below >> > > > > expression display tuples from variable a shown below >> > > > > >> > > > > >> > > > > let(a=fetch(SMS,having(rollup(over=email, >> > > > > count(email), >> > > > > select(search(SMS, >> > > > > q=*:*, >> > > > > fl="id,dv_sv_business_email", >> > > > > sort="dv_sv_business_email asc"), >> > > > > id, >> > > > > dv_sv_business_email as email)), >> > > > > eq(count(email),1)), >> > > > > fl="id,dv_sv_business_email as email", >> > > > > on="email=dv_sv_business_email"), >> > > > > b=fetch(SMS,having(rollup(over=email, >> > > > > count(email), >> > > > > select(search(SMS, >> > > > > q=*:*, >> > > > > fl="id,dv_sv_personal_email", >> > > > > sort="dv_sv_personal_email asc"), >> > > > > id, >> > > > > dv_sv_personal_email as email)), >> > > > > eq(count(email),1)), >> > > > > fl="id,dv_sv_personal_email as email", >> > > > > on="email=dv_sv_personal_email"), >> > > > > c=innerJoin(sort(get(a),by="email asc"),sort(get(b),by="email >> > > > > asc"),on="email"), >> > > > > #d=select(get(c),id,email), >> > > > > get(a) >> > > > > ) >> > > > > >> > > > > var a result >> > > > > == >> > > > > { >> > > > > "result-set": { >> > > > > "docs": [ >> > > > > { >> > > > > "count(email)": 1, >> > > > > "id": "1", >> > > > > "email": "A" >> > > > > }, >> > > > > { >> > > > > "count(email)": 1, >> > > > > "id": "2", >> > > > > "email": "C" >> > > > > }, >> > > > > { >> > > > > "EOF": true, >> > > > > "RESPONSE_TIME": 18 >> > > > > } >> > > > > ] >> > > > > } >> > > > > } >> > > > > >> > > > > And after uncomment var d above, even though we are displaying a, >> we >> > > get >> > > > > results shown below. I understand that join in my test data didn't >> > find >> > > > any >> > > > > match but then it should not skew up the results of var a. When >> data >> > > > > matches during join then its fine but otherwise I am running into >> > this >> > > > > issue and whole next expressions doesn't get evaluated due to >> this... >> > > > > >> > > > > >> > > > > after uncomment var d >> > > > > === >> > > > > { >> > > > > "result-set": { >> > > > > "docs": [ >> > > > > { >> > > > > "EXCEPTION": "Index: 0, Size: 0", >> > > > > "EOF": true, >> > > > > "RESPONSE_TIME": 44 >> > > > > } >> > > > > ] >> > > > > } >> > > > > } >> > > > > >> > > > > On Thu, Jun 22, 2017 at 11:51 AM, Susheel Kumar < >> > susheel2...@gmail.com >> > > > >> > > > > wrote: >> > > > > >> > > > >> Hello Joel, >> > > > >> >> > > > >> Facing a weird behavior when using hashJoin / innerJoin etc. The >> > below >> > > > >> expression display tuples from variable a and the moment I use >> get >> > > on >> > > > >> innerJoin / hashJoin expr on variable c >> > > > >> >> > > > >> >> > > > >> let(a=fetch(SMS,having(rollup(over=email, >> > > > >> count(email), >> > > > >> select(search(SMS, >> > > > >> q=*:*, >> > > > >> fl="id,dv_sv_business_email", >> > > > >> sort="dv_sv_business_email asc"), >> > > > >> id, >> > > > >> dv_sv_business_email as email)), >> > > > >> eq(count(email),1)), >> > > > >> fl="id,dv_sv_business_email as email", >> > > > >> on="email=dv_sv_business_email"), >> > > > >> b=fetch(SMS,having(rollup(over=email, >> > > > >> count(email), >> > > > >> select(search(SMS, >> > > > >> q=*:*, >> > > > >> fl="id,dv_sv_personal_email", >> > > > >> sort="dv_sv_personal_email asc"), >> > > > >> id, >> > > > >> dv_sv_personal_email as email)), >> > > > >> eq(count(email),1)), >> > > > >> fl="id,dv_sv_personal_email as email", >> > > > >> on="email=dv_sv_personal_email"), >> > > > >> c=innerJoin(sort(get(a),by="email asc"),sort(get(b),by="email >> > > > >> asc"),on="email"), >> > > > >> #d=select(get(c),id,email), >> > > > >> get(a) >> > > > >> ) >> > > > >> >> > > > >> var a result >> > > > >> == >> > > > >> { >> > > > >> "result-set": { >> > > > >> "docs": [ >> > > > >> { >> > > > >> "count(email)": 1, >> > > > >> "id": "1", >> > > > >> "email": "A" >> > > > >> }, >> > > > >> { >> > > > >> "count(email)": 1, >> > > > >> "id": "2", >> > > > >> "email": "C" >> > > > >> }, >> > > > >> { >> > > > >> "EOF": true, >> > > > >> "RESPONSE_TIME": 18 >> > > > >> } >> > > > >> ] >> > > > >> } >> > > > >> } >> > > > >> >> > > > >> after uncomment var d above, even though we are displaying a, we >> get >> > > > >> results like below. I understand that join in my test data didn't >> > find >> > > > any >> > > > >> match but then it should not skew up the results of var a. When >> > data >> > > > >> matches during join then its fine but otherwise I am running into >> > this >> > > > >> issue and whole next expressions doesn't get evaluated due to >> > this... >> > > > >> >> > > > >> >> > > > >> { >> > > > >> "result-set": { >> > > > >> "docs": [ >> > > > >> { >> > > > >> "EXCEPTION": "Index: 0, Size: 0", >> > > > >> "EOF": true, >> > > > >> "RESPONSE_TIME": 44 >> > > > >> } >> > > > >> ] >> > > > >> } >> > > > >> } >> > > > >> >> > > > > >> > > > > >> > > > >> > > >> > >> > >