You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@solr.apache.org by Jonathan Bridges <jo...@gmail.com> on 2021/05/04 22:29:56 UTC

Solr 8.8.2 childFilter multiple conditions

Hello,

With Solr 8.8.2 I am unable to provide more than one filter in the fl
"childFilter" param.

For example,

fq={!parent which='docType:parent_doc_type'} docType: child_doc_type AND
color: Red AND size: Large

This fq will filter all parent documents which have child documents that
are 'Red' and 'Large'.

Now I want to show the parents with the children in the result, but only
the children which are 'Red' and 'Large'. In the past (Solr v6) I would
accomplish this with:

fl=*, [child childFilter='docType:child_doc_type AND color: Red AND size:
Large']
However, with Solr 8.8.2 I get no children in the results and no errors.

If I remove the extra AND conditions:

fl=*, [child childFilter='docType:child_doc_type']
I then get all child documents, even ones which are Blue and Small.

How can I include only child documents which match the fq? Is there some
way to specify multiple conditions now that I just can't find in the docs?

Thanks for any help.

RE: Solr 8.8.2 childFilter multiple conditions

Posted by Hari Iyer <iy...@hotmail.com>.
I have the same problem and I solved it using the subquery result transformer e.g.
fl=*, mychild:[subquery]

query params as follows:
mychild.q= {!terms v=$row.instanceid f=instanceid}&mychild.fq=(contenttype:blah AND quantity:5)

From: Jonathan Bridges<ma...@gmail.com>
Sent: Tuesday, May 4, 2021 6:30 PM
To: users@solr.apache.org<ma...@solr.apache.org>
Subject: Solr 8.8.2 childFilter multiple conditions

Hello,

With Solr 8.8.2 I am unable to provide more than one filter in the fl
"childFilter" param.

For example,

fq={!parent which='docType:parent_doc_type'} docType: child_doc_type AND
color: Red AND size: Large

This fq will filter all parent documents which have child documents that
are 'Red' and 'Large'.

Now I want to show the parents with the children in the result, but only
the children which are 'Red' and 'Large'. In the past (Solr v6) I would
accomplish this with:

fl=*, [child childFilter='docType:child_doc_type AND color: Red AND size:
Large']
However, with Solr 8.8.2 I get no children in the results and no errors.

If I remove the extra AND conditions:

fl=*, [child childFilter='docType:child_doc_type']
I then get all child documents, even ones which are Blue and Small.

How can I include only child documents which match the fq? Is there some
way to specify multiple conditions now that I just can't find in the docs?

Thanks for any help.


Re: Solr 8.8.2 childFilter multiple conditions

Posted by David Smiley <ds...@apache.org>.
Subquery is a good idea here too.  It's slower but it's also more powerful,
more general.

I'll try and get SOLR-15156 into 8.9

~ David Smiley
Apache Lucene/Solr Search Developer
http://www.linkedin.com/in/davidwsmiley


On Thu, May 6, 2021 at 3:42 PM Jonathan Bridges <jo...@gmail.com>
wrote:

> Thanks David for confirming this and the work around, really appreciate it.
>
> I also found a subquery could give correct results, though haven't tested
> performance comparison with childFilter. I had never used subquery before
> so it hadn't occurred to me. Will try them both out.
>
> fq={!parent which='docType:factory'} docType:widget AND color:Red AND
> size:Large
> fl=*, widgets:[subquery]
> widgets.q=docType: child_doc_type AND color: Red AND size: Large
> widgets.fq={!terms f=_nest_parent_ v=$row.id}
>
> Thanks again,
> Jon Bridges
>
>
> On Thu, May 6, 2021 at 9:38 AM David Smiley <ds...@apache.org> wrote:
>
> > Hi,
> >
> > It appears this was broken in 8.0 by
> > https://issues.apache.org/jira/browse/SOLR-12768
> > And then fixed in 9.0 (not released) by SOLR-15156
> >
> > I didn't back-port the fix because I thought users might be relying on
> the
> > escaping behavior.  I didn't realize such escaping didn't exist before
> > SOLR-12768.  In light of this, the change would make an appropriate
> > addition to 8.9 but not a bug-fix version.
> >
> > A work-around is to express your query without colons, since the internal
> > logic is gated on that.  So something like:
> >    childFilter='+{!field f=docType v=child_doc_type} +{!field f=color
> > v=Red}'        etc.   Disclaimer: I didn't test that; it *may* be
> necessary
> > to move out some of this into other parameters based on parsing
> > rules/restrictions e.g. childFilter=$theChildFilter  and then add a
> > top-level param.  But I think it's not needed.
> >
> > ~ David Smiley
> > Apache Lucene/Solr Search Developer
> > http://www.linkedin.com/in/davidwsmiley
> >
> >
> > On Tue, May 4, 2021 at 6:30 PM Jonathan Bridges <jo...@gmail.com>
> > wrote:
> >
> > > Hello,
> > >
> > > With Solr 8.8.2 I am unable to provide more than one filter in the fl
> > > "childFilter" param.
> > >
> > > For example,
> > >
> > > fq={!parent which='docType:parent_doc_type'} docType: child_doc_type
> AND
> > > color: Red AND size: Large
> > >
> > > This fq will filter all parent documents which have child documents
> that
> > > are 'Red' and 'Large'.
> > >
> > > Now I want to show the parents with the children in the result, but
> only
> > > the children which are 'Red' and 'Large'. In the past (Solr v6) I would
> > > accomplish this with:
> > >
> > > fl=*, [child childFilter='docType:child_doc_type AND color: Red AND
> size:
> > > Large']
> > > However, with Solr 8.8.2 I get no children in the results and no
> errors.
> > >
> > > If I remove the extra AND conditions:
> > >
> > > fl=*, [child childFilter='docType:child_doc_type']
> > > I then get all child documents, even ones which are Blue and Small.
> > >
> > > How can I include only child documents which match the fq? Is there
> some
> > > way to specify multiple conditions now that I just can't find in the
> > docs?
> > >
> > > Thanks for any help.
> > >
> >
>

Re: Solr 8.8.2 childFilter multiple conditions

Posted by Jonathan Bridges <jo...@gmail.com>.
Thanks David for confirming this and the work around, really appreciate it.

I also found a subquery could give correct results, though haven't tested
performance comparison with childFilter. I had never used subquery before
so it hadn't occurred to me. Will try them both out.

fq={!parent which='docType:factory'} docType:widget AND color:Red AND
size:Large
fl=*, widgets:[subquery]
widgets.q=docType: child_doc_type AND color: Red AND size: Large
widgets.fq={!terms f=_nest_parent_ v=$row.id}

Thanks again,
Jon Bridges


On Thu, May 6, 2021 at 9:38 AM David Smiley <ds...@apache.org> wrote:

> Hi,
>
> It appears this was broken in 8.0 by
> https://issues.apache.org/jira/browse/SOLR-12768
> And then fixed in 9.0 (not released) by SOLR-15156
>
> I didn't back-port the fix because I thought users might be relying on the
> escaping behavior.  I didn't realize such escaping didn't exist before
> SOLR-12768.  In light of this, the change would make an appropriate
> addition to 8.9 but not a bug-fix version.
>
> A work-around is to express your query without colons, since the internal
> logic is gated on that.  So something like:
>    childFilter='+{!field f=docType v=child_doc_type} +{!field f=color
> v=Red}'        etc.   Disclaimer: I didn't test that; it *may* be necessary
> to move out some of this into other parameters based on parsing
> rules/restrictions e.g. childFilter=$theChildFilter  and then add a
> top-level param.  But I think it's not needed.
>
> ~ David Smiley
> Apache Lucene/Solr Search Developer
> http://www.linkedin.com/in/davidwsmiley
>
>
> On Tue, May 4, 2021 at 6:30 PM Jonathan Bridges <jo...@gmail.com>
> wrote:
>
> > Hello,
> >
> > With Solr 8.8.2 I am unable to provide more than one filter in the fl
> > "childFilter" param.
> >
> > For example,
> >
> > fq={!parent which='docType:parent_doc_type'} docType: child_doc_type AND
> > color: Red AND size: Large
> >
> > This fq will filter all parent documents which have child documents that
> > are 'Red' and 'Large'.
> >
> > Now I want to show the parents with the children in the result, but only
> > the children which are 'Red' and 'Large'. In the past (Solr v6) I would
> > accomplish this with:
> >
> > fl=*, [child childFilter='docType:child_doc_type AND color: Red AND size:
> > Large']
> > However, with Solr 8.8.2 I get no children in the results and no errors.
> >
> > If I remove the extra AND conditions:
> >
> > fl=*, [child childFilter='docType:child_doc_type']
> > I then get all child documents, even ones which are Blue and Small.
> >
> > How can I include only child documents which match the fq? Is there some
> > way to specify multiple conditions now that I just can't find in the
> docs?
> >
> > Thanks for any help.
> >
>

Re: Solr 8.8.2 childFilter multiple conditions

Posted by David Smiley <ds...@apache.org>.
Hi,

It appears this was broken in 8.0 by
https://issues.apache.org/jira/browse/SOLR-12768
And then fixed in 9.0 (not released) by SOLR-15156

I didn't back-port the fix because I thought users might be relying on the
escaping behavior.  I didn't realize such escaping didn't exist before
SOLR-12768.  In light of this, the change would make an appropriate
addition to 8.9 but not a bug-fix version.

A work-around is to express your query without colons, since the internal
logic is gated on that.  So something like:
   childFilter='+{!field f=docType v=child_doc_type} +{!field f=color
v=Red}'        etc.   Disclaimer: I didn't test that; it *may* be necessary
to move out some of this into other parameters based on parsing
rules/restrictions e.g. childFilter=$theChildFilter  and then add a
top-level param.  But I think it's not needed.

~ David Smiley
Apache Lucene/Solr Search Developer
http://www.linkedin.com/in/davidwsmiley


On Tue, May 4, 2021 at 6:30 PM Jonathan Bridges <jo...@gmail.com>
wrote:

> Hello,
>
> With Solr 8.8.2 I am unable to provide more than one filter in the fl
> "childFilter" param.
>
> For example,
>
> fq={!parent which='docType:parent_doc_type'} docType: child_doc_type AND
> color: Red AND size: Large
>
> This fq will filter all parent documents which have child documents that
> are 'Red' and 'Large'.
>
> Now I want to show the parents with the children in the result, but only
> the children which are 'Red' and 'Large'. In the past (Solr v6) I would
> accomplish this with:
>
> fl=*, [child childFilter='docType:child_doc_type AND color: Red AND size:
> Large']
> However, with Solr 8.8.2 I get no children in the results and no errors.
>
> If I remove the extra AND conditions:
>
> fl=*, [child childFilter='docType:child_doc_type']
> I then get all child documents, even ones which are Blue and Small.
>
> How can I include only child documents which match the fq? Is there some
> way to specify multiple conditions now that I just can't find in the docs?
>
> Thanks for any help.
>