Is it possible to duplicate its functionality using existing expressions? In SQL, while grouping you can just say first(column) to get some one-to-many value if you don't care which one you get. Solr usually only has min,max,avg.. aggregation functions. If it had a "first" function I could just get userid and first(username) in an expression, I sometimes use min(username) as a trick while faceting to get extra fields alongside faceted results, but max,min only accepts numbers in streaming expressions.
On Wed, 14 Oct 2020 20:47:28 -0400 Joel Bernstein <joels...@gmail.com> wrote: > Yes, the docs mention one-to-one and many-to-one fetches, but one-to-many > is not supported currently. I've never really been happy with fetch. It > really needs to be replaced with a standard nested loop join that handles > all scenarios. > > > Joel Bernstein > http://joelsolr.blogspot.com/ > > > On Tue, Oct 13, 2020 at 6:30 PM uyilmaz <uyil...@vivaldi.net.invalid> wrote: > > > I think I found the reason right after asking (facepalm), but it took me > > days to realize this. > > > > I think fetch performs a naive "in" query, something like: > > > > q="userid:(123123 123123123 12432423321323)&rows={batchSize}" > > > > When userid to document relation is one-to-many, it is possible that above > > query will result in documents consisting entirely of last two userid's > > documents, so the first one is left out, resulting in empty username. Docs > > state that one to many is not supported with fetch, but I didn't stumble > > onto this issue until recently so I just assumed it would work. > > > > Sorry to take your time, I hope this helps somebody later. > > > > Have a nice day. > > > > On Wed, 14 Oct 2020 00:38:05 +0300 > > uyilmaz <uyil...@vivaldi.net.INVALID> wrote: > > > > > > > > Hi all, > > > > > > I have a streaming expression looking like: > > > > > > fetch( > > > myAlias, > > > top( > > > n=3, > > > ....various expressions here > > > sort="count(*) desc" > > > ), > > > fl="username", on="userid=userid", batchSize=3 > > > ) > > > > > > which fails to fetch username field for the 1st result: > > > > > > { > > > "result-set":{ > > > "docs":[{ > > > "userid":"123123", > > > "count(*)":58} > > > ,{ > > > "userid":"123123123", > > > "count(*)":32, > > > "username":"Ayha"} > > > ,{ > > > "userid":"12432423321323", > > > "count(*)":30, > > > "username":"MEHM"} > > > ,{ > > > "EOF":true, > > > "RESPONSE_TIME":34889}]}} > > > > > > But strangely, when I change n and batchSize both to 2 and touch nothing > > else, fetch fetches the first username correctly: > > > > > > fetch( > > > myAlias, > > > top( > > > n=2, > > > ....various expressions here > > > sort="count(*) desc" > > > ), > > > fl="username", on="userid=userid", batchSize=2 > > > ) > > > > > > Result is: > > > > > > { > > > "result-set":{ > > > "docs":[{ > > > "userid":"123123", > > > "count(*)":58, > > > "username":"mura"} > > > ,{ > > > "userid":"123123123", > > > "count(*)":32, > > > "username":"Ayha"} > > > ,{ > > > "EOF":true, > > > "RESPONSE_TIME":34889}]}} > > > > > > What can be the problem? > > > > > > Regards > > > > > > ~~ufuk > > > > > > -- > > > uyilmaz <uyil...@vivaldi.net> > > > > > > -- > > uyilmaz <uyil...@vivaldi.net> > > -- uyilmaz <uyil...@vivaldi.net>