You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@solr.apache.org by Stephen Lewis Bianamara <st...@gmail.com> on 2021/10/25 13:54:08 UTC

Child doc question

Hi SOLR Community,

I'm experimenting with solr 8.10 and trying to get a query pattern with
child docs to work. An example of a nested document structure I'd like to
search is below. In this example, there will only be two levels, child of
type:post and /comments children.
{
    "id": "post1",
    "type": "post",
    "post_en": "I put lemon on my apple slices to keep them fresh",
    "comments": [
        {
            "id": "comment1",
            "type": "comment",
            "comment_en": "Lime works too"
        },
        {
            "id": "comment2",
            "type": "comment",
            "comment_en": "Does it work for pears?"
        }
    ]
}

What I'd like is to be able to do keyword search for /lemon apple/ and only
return the parent; /lemon lime/ and return the parent and comment1; /lemon
pear/ and return the parent and comment2; /lime pear/ and return the
parent, comment1, and comment2. And /lime gum/ should return nothing (as if
it were an AND query). Additionally, this should all be done with relevance.

I've tried a few combinations of nested docs from this documentation
<https://solr.apache.org/guide/8_10/searching-nested-documents.html>, but
am having trouble getting this to work. I wonder if I'm asking more from
block join/child doc transformer than it currently supports, or perhaps I'm
just missing something. Can someone familiar with nesting documents help me
out? I've included my schema below as well.

Thanks!
Stephen

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="ChildTest" version="1.5">
  <fields>
    <field name="id" type="string" required="true" docValues="true"/>
    <dynamicField name="*_en" type="text_en" large="true" omitNorms="true"
/>
    <field name="username" type="string" docValues="true" />
    <field name="type" type="string" docValues="true" />
    <field name="_version_" type="long" />
    <!-- child docs -->
    <field name="_root_" type="string" indexed="true" stored="false"
docValues="false" />
    <field name="_nest_path_" type="_nest_path_" />
    <field name="_nest_parent_" type="string" indexed="true" stored="true"
/>
  </fields>
  <uniqueKey>id</uniqueKey>
  <types>
    <fieldType name="_nest_path_" class="solr.NestPathField" />
    <fieldType name="long" class="solr.LongPointField" />
    <fieldType name="string" class="solr.StrField" sortMissingLast="true"
/>
    <fieldType name="text_en" class="solr.TextField"
positionIncrementGap="100" autoGeneratePhraseQueries="true">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory"/>
      </analyzer>
    </fieldType>
  </types>
</schema>

Re: Child doc question

Posted by Alessandro Benedetti <a....@sease.io>.
Hi Stephen,
you are welcome, but to give a definitive answer there I think it would be
beneficial to fully describe your latest requirement.
Is it an AND query across children? i.e. you just want a parent only if its
children have both the terms? potentially 1 child one term and another
child another?

Cheers
--------------------------
Alessandro Benedetti
Apache Lucene/Solr Committer
Director, R&D Software Engineer, Search Consultant

www.sease.io


On Tue, 9 Nov 2021 at 17:50, Stephen Lewis Bianamara <
stephen.bianamara@gmail.com> wrote:

> Alessandro,
>
> Thank you for your response! In this case AND search will be a requirement,
> and I was hoping it would be possible across child docs. It's great to have
> the confirmation here that it is indeed not possible without duplicating
> data.
>
> Cheers,
> Stephen
>
> On Mon, Nov 8, 2021 at 10:52 AM Alessandro Benedetti <a.benedetti@sease.io
> >
> wrote:
>
> > Hi Stephen,
> > I have been using nested documents and the various types of join multiple
> > times in the past.
> > Let's assume you can use the block join.
> > First of all you need to follow the indexing approach that aims to index
> a
> > parent and children within the same block:
> >
> > https://solr.apache.org/guide/8_10/indexing-nested-documents.html
> >
> > Then let's see the various use cases you mentioned:
> >
> >
> > *keyword search for /lemon apple/ and onlyreturn the parent;*
> > Do you want to match on children and then only return the parents?
> >
> >
> https://solr.apache.org/guide/8_10/other-parsers.html#block-join-parent-query-parser
> >
> > Do you just want to match the parents? then just run the query on the
> > parent field you like and add a 'fq' filtering by the document type
> > (fq='type": "post")
> >
> > * /lemon lime/ and return the parent and comment1;*
> > */lemon pear/ and return the parent and comment2;*
> > I guess you can achieve this just by running a normal multi-field query,
> > for example using the edismax query parser(
> > https://solr.apache.org/guide/6_6/the-extended-dismax-query-parser.html)
> > and both:
> > comment_en and post_en as qf(query fields).
> > *N.B.* nested documents are just separate Lucene documents after all, so
> > you can retrieve them indepentently of block join query parsers.
> >
> >
> > * /lime pear/ and return the*
> > *parent, comment1, and comment2.*
> > You go with a
> >
> >
> https://solr.apache.org/guide/8_10/other-parsers.html#block-join-parent-query-parser
> > to
> > retrieve the parents of fitting children and play with the
> >
> >
> https://solr.apache.org/guide/8_10/transforming-result-documents.html#child-childdoctransformerfactory
> > to retrieve the related matching children.
> > The easiest approach involves the transformer to just return all
> children,
> > in your case you may want to play with the childFilter, to only return
> > matching children.
> > If the transformer won't solve your exact use case, I recommend you
> combine
> > the parent query parser in OR with a classic query on the children.
> >
> >
> > * And /lime gum/ should return nothing (as ifit were an AND query).*
> > For this, I don't think your data model design(nested docs) fits the
> > requirement, you may need to flatten the data.
> >
> > You can find more details about scoring:
> >
> >
> https://solr.apache.org/guide/8_10/other-parsers.html#scoring-with-the-block-join-parent-query-parser
> > <
> >
> https://solr.apache.org/guide/8_10/other-parsers.html#scoring-with-the-block-join-parent-query-parser
> > >
> >
> > Hope this helped!
> >
> > Cheers
> > --------------------------
> > Alessandro Benedetti
> > Apache Lucene/Solr Committer
> > Director, R&D Software Engineer, Search Consultant
> >
> > www.sease.io
> >
> >
> > On Wed, 3 Nov 2021 at 20:58, Stephen Lewis Bianamara <
> > stephen.bianamara@gmail.com> wrote:
> >
> > > Hi Folks,
> > >
> > > Going to give this one more shot. Is there anyone out there who
> > understands
> > > child docs well enough to answer this basic question?
> > >
> > > Thanks,
> > > Stephen
> > >
> > > On Fri, Oct 29, 2021 at 2:56 PM Stephen Lewis Bianamara <
> > > stephen.bianamara@gmail.com> wrote:
> > >
> > > > Hi SOLR Community,
> > > >
> > > > Still hoping for help on this. Is there anyone out there who
> > understands
> > > > child docs well enough to answer the question of "yes this should
> work"
> > > or
> > > > "no it cannot work"?
> > > >
> > > > Thanks,
> > > > Stephen
> > > >
> > > > On Wed, Oct 27, 2021 at 8:51 AM Stephen Lewis Bianamara <
> > > > stephen.bianamara@gmail.com> wrote:
> > > >
> > > >> Hi Folks,
> > > >>
> > > >> Wanted to follow up here. Can someone help me just answer whether
> what
> > > >> I'm hoping for is feasible?
> > > >>
> > > >> (a) The desired outcome is supported with the right model/queries
> > > >> (b) The desired outcome is not supported; maybe it could be in the
> > > future
> > > >> (c) The desired outcome is fundamentally unsupportable for the
> > > >> foreseeable future
> > > >>
> > > >> To summarize, the desired behavior is:
> > > >>
> > > >> - Query which can AND across child docs (i.e, return parents
> > > >> whos children match an AND query even if tokens are spread across
> > > children)
> > > >> - Query whose parents are returned based on relevance of the
> children
> > > >>
> > > >> In my example, obviously there is parent data being queried
> > ("post_en"),
> > > >> but the parent data could easily be made child data if need be.
> > > >>
> > > >> Thanks!
> > > >> Stephen
> > > >>
> > > >> On Mon, Oct 25, 2021 at 6:54 AM Stephen Lewis Bianamara <
> > > >> stephen.bianamara@gmail.com> wrote:
> > > >>
> > > >>> Hi SOLR Community,
> > > >>>
> > > >>> I'm experimenting with solr 8.10 and trying to get a query pattern
> > with
> > > >>> child docs to work. An example of a nested document structure I'd
> > like
> > > to
> > > >>> search is below. In this example, there will only be two levels,
> > child
> > > of
> > > >>> type:post and /comments children.
> > > >>> {
> > > >>>     "id": "post1",
> > > >>>     "type": "post",
> > > >>>     "post_en": "I put lemon on my apple slices to keep them fresh",
> > > >>>     "comments": [
> > > >>>         {
> > > >>>             "id": "comment1",
> > > >>>             "type": "comment",
> > > >>>             "comment_en": "Lime works too"
> > > >>>         },
> > > >>>         {
> > > >>>             "id": "comment2",
> > > >>>             "type": "comment",
> > > >>>             "comment_en": "Does it work for pears?"
> > > >>>         }
> > > >>>     ]
> > > >>> }
> > > >>>
> > > >>> What I'd like is to be able to do keyword search for /lemon apple/
> > and
> > > >>> only return the parent; /lemon lime/ and return the parent and
> > > comment1;
> > > >>> /lemon pear/ and return the parent and comment2; /lime pear/ and
> > > return the
> > > >>> parent, comment1, and comment2. And /lime gum/ should return
> nothing
> > > (as if
> > > >>> it were an AND query). Additionally, this should all be done with
> > > relevance.
> > > >>>
> > > >>> I've tried a few combinations of nested docs from this
> documentation
> > > >>> <
> https://solr.apache.org/guide/8_10/searching-nested-documents.html
> > >,
> > > >>> but am having trouble getting this to work. I wonder if I'm asking
> > more
> > > >>> from block join/child doc transformer than it currently supports,
> or
> > > >>> perhaps I'm just missing something. Can someone familiar with
> nesting
> > > >>> documents help me out? I've included my schema below as well.
> > > >>>
> > > >>> Thanks!
> > > >>> Stephen
> > > >>>
> > > >>> <?xml version="1.0" encoding="UTF-8" ?>
> > > >>> <schema name="ChildTest" version="1.5">
> > > >>>   <fields>
> > > >>>     <field name="id" type="string" required="true"
> docValues="true"/>
> > > >>>     <dynamicField name="*_en" type="text_en" large="true"
> > > >>> omitNorms="true" />
> > > >>>     <field name="username" type="string" docValues="true" />
> > > >>>     <field name="type" type="string" docValues="true" />
> > > >>>     <field name="_version_" type="long" />
> > > >>>     <!-- child docs -->
> > > >>>     <field name="_root_" type="string" indexed="true"
> stored="false"
> > > >>> docValues="false" />
> > > >>>     <field name="_nest_path_" type="_nest_path_" />
> > > >>>     <field name="_nest_parent_" type="string" indexed="true"
> > > >>> stored="true" />
> > > >>>   </fields>
> > > >>>   <uniqueKey>id</uniqueKey>
> > > >>>   <types>
> > > >>>     <fieldType name="_nest_path_" class="solr.NestPathField" />
> > > >>>     <fieldType name="long" class="solr.LongPointField" />
> > > >>>     <fieldType name="string" class="solr.StrField"
> > > >>> sortMissingLast="true" />
> > > >>>     <fieldType name="text_en" class="solr.TextField"
> > > >>> positionIncrementGap="100" autoGeneratePhraseQueries="true">
> > > >>>       <analyzer type="index">
> > > >>>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
> > > >>>         <filter class="solr.LowerCaseFilterFactory"/>
> > > >>>         <filter class="solr.SnowballPorterFilterFactory"/>
> > > >>>       </analyzer>
> > > >>>       <analyzer type="query">
> > > >>>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
> > > >>>         <filter class="solr.LowerCaseFilterFactory"/>
> > > >>>         <filter class="solr.SnowballPorterFilterFactory"/>
> > > >>>       </analyzer>
> > > >>>     </fieldType>
> > > >>>   </types>
> > > >>> </schema>
> > > >>>
> > > >>
> > >
> >
>

Re: Child doc question

Posted by Stephen Lewis Bianamara <st...@gmail.com>.
Alessandro,

Thank you for your response! In this case AND search will be a requirement,
and I was hoping it would be possible across child docs. It's great to have
the confirmation here that it is indeed not possible without duplicating
data.

Cheers,
Stephen

On Mon, Nov 8, 2021 at 10:52 AM Alessandro Benedetti <a....@sease.io>
wrote:

> Hi Stephen,
> I have been using nested documents and the various types of join multiple
> times in the past.
> Let's assume you can use the block join.
> First of all you need to follow the indexing approach that aims to index a
> parent and children within the same block:
>
> https://solr.apache.org/guide/8_10/indexing-nested-documents.html
>
> Then let's see the various use cases you mentioned:
>
>
> *keyword search for /lemon apple/ and onlyreturn the parent;*
> Do you want to match on children and then only return the parents?
>
> https://solr.apache.org/guide/8_10/other-parsers.html#block-join-parent-query-parser
>
> Do you just want to match the parents? then just run the query on the
> parent field you like and add a 'fq' filtering by the document type
> (fq='type": "post")
>
> * /lemon lime/ and return the parent and comment1;*
> */lemon pear/ and return the parent and comment2;*
> I guess you can achieve this just by running a normal multi-field query,
> for example using the edismax query parser(
> https://solr.apache.org/guide/6_6/the-extended-dismax-query-parser.html)
> and both:
> comment_en and post_en as qf(query fields).
> *N.B.* nested documents are just separate Lucene documents after all, so
> you can retrieve them indepentently of block join query parsers.
>
>
> * /lime pear/ and return the*
> *parent, comment1, and comment2.*
> You go with a
>
> https://solr.apache.org/guide/8_10/other-parsers.html#block-join-parent-query-parser
> to
> retrieve the parents of fitting children and play with the
>
> https://solr.apache.org/guide/8_10/transforming-result-documents.html#child-childdoctransformerfactory
> to retrieve the related matching children.
> The easiest approach involves the transformer to just return all children,
> in your case you may want to play with the childFilter, to only return
> matching children.
> If the transformer won't solve your exact use case, I recommend you combine
> the parent query parser in OR with a classic query on the children.
>
>
> * And /lime gum/ should return nothing (as ifit were an AND query).*
> For this, I don't think your data model design(nested docs) fits the
> requirement, you may need to flatten the data.
>
> You can find more details about scoring:
>
> https://solr.apache.org/guide/8_10/other-parsers.html#scoring-with-the-block-join-parent-query-parser
> <
> https://solr.apache.org/guide/8_10/other-parsers.html#scoring-with-the-block-join-parent-query-parser
> >
>
> Hope this helped!
>
> Cheers
> --------------------------
> Alessandro Benedetti
> Apache Lucene/Solr Committer
> Director, R&D Software Engineer, Search Consultant
>
> www.sease.io
>
>
> On Wed, 3 Nov 2021 at 20:58, Stephen Lewis Bianamara <
> stephen.bianamara@gmail.com> wrote:
>
> > Hi Folks,
> >
> > Going to give this one more shot. Is there anyone out there who
> understands
> > child docs well enough to answer this basic question?
> >
> > Thanks,
> > Stephen
> >
> > On Fri, Oct 29, 2021 at 2:56 PM Stephen Lewis Bianamara <
> > stephen.bianamara@gmail.com> wrote:
> >
> > > Hi SOLR Community,
> > >
> > > Still hoping for help on this. Is there anyone out there who
> understands
> > > child docs well enough to answer the question of "yes this should work"
> > or
> > > "no it cannot work"?
> > >
> > > Thanks,
> > > Stephen
> > >
> > > On Wed, Oct 27, 2021 at 8:51 AM Stephen Lewis Bianamara <
> > > stephen.bianamara@gmail.com> wrote:
> > >
> > >> Hi Folks,
> > >>
> > >> Wanted to follow up here. Can someone help me just answer whether what
> > >> I'm hoping for is feasible?
> > >>
> > >> (a) The desired outcome is supported with the right model/queries
> > >> (b) The desired outcome is not supported; maybe it could be in the
> > future
> > >> (c) The desired outcome is fundamentally unsupportable for the
> > >> foreseeable future
> > >>
> > >> To summarize, the desired behavior is:
> > >>
> > >> - Query which can AND across child docs (i.e, return parents
> > >> whos children match an AND query even if tokens are spread across
> > children)
> > >> - Query whose parents are returned based on relevance of the children
> > >>
> > >> In my example, obviously there is parent data being queried
> ("post_en"),
> > >> but the parent data could easily be made child data if need be.
> > >>
> > >> Thanks!
> > >> Stephen
> > >>
> > >> On Mon, Oct 25, 2021 at 6:54 AM Stephen Lewis Bianamara <
> > >> stephen.bianamara@gmail.com> wrote:
> > >>
> > >>> Hi SOLR Community,
> > >>>
> > >>> I'm experimenting with solr 8.10 and trying to get a query pattern
> with
> > >>> child docs to work. An example of a nested document structure I'd
> like
> > to
> > >>> search is below. In this example, there will only be two levels,
> child
> > of
> > >>> type:post and /comments children.
> > >>> {
> > >>>     "id": "post1",
> > >>>     "type": "post",
> > >>>     "post_en": "I put lemon on my apple slices to keep them fresh",
> > >>>     "comments": [
> > >>>         {
> > >>>             "id": "comment1",
> > >>>             "type": "comment",
> > >>>             "comment_en": "Lime works too"
> > >>>         },
> > >>>         {
> > >>>             "id": "comment2",
> > >>>             "type": "comment",
> > >>>             "comment_en": "Does it work for pears?"
> > >>>         }
> > >>>     ]
> > >>> }
> > >>>
> > >>> What I'd like is to be able to do keyword search for /lemon apple/
> and
> > >>> only return the parent; /lemon lime/ and return the parent and
> > comment1;
> > >>> /lemon pear/ and return the parent and comment2; /lime pear/ and
> > return the
> > >>> parent, comment1, and comment2. And /lime gum/ should return nothing
> > (as if
> > >>> it were an AND query). Additionally, this should all be done with
> > relevance.
> > >>>
> > >>> I've tried a few combinations of nested docs from this documentation
> > >>> <https://solr.apache.org/guide/8_10/searching-nested-documents.html
> >,
> > >>> but am having trouble getting this to work. I wonder if I'm asking
> more
> > >>> from block join/child doc transformer than it currently supports, or
> > >>> perhaps I'm just missing something. Can someone familiar with nesting
> > >>> documents help me out? I've included my schema below as well.
> > >>>
> > >>> Thanks!
> > >>> Stephen
> > >>>
> > >>> <?xml version="1.0" encoding="UTF-8" ?>
> > >>> <schema name="ChildTest" version="1.5">
> > >>>   <fields>
> > >>>     <field name="id" type="string" required="true" docValues="true"/>
> > >>>     <dynamicField name="*_en" type="text_en" large="true"
> > >>> omitNorms="true" />
> > >>>     <field name="username" type="string" docValues="true" />
> > >>>     <field name="type" type="string" docValues="true" />
> > >>>     <field name="_version_" type="long" />
> > >>>     <!-- child docs -->
> > >>>     <field name="_root_" type="string" indexed="true" stored="false"
> > >>> docValues="false" />
> > >>>     <field name="_nest_path_" type="_nest_path_" />
> > >>>     <field name="_nest_parent_" type="string" indexed="true"
> > >>> stored="true" />
> > >>>   </fields>
> > >>>   <uniqueKey>id</uniqueKey>
> > >>>   <types>
> > >>>     <fieldType name="_nest_path_" class="solr.NestPathField" />
> > >>>     <fieldType name="long" class="solr.LongPointField" />
> > >>>     <fieldType name="string" class="solr.StrField"
> > >>> sortMissingLast="true" />
> > >>>     <fieldType name="text_en" class="solr.TextField"
> > >>> positionIncrementGap="100" autoGeneratePhraseQueries="true">
> > >>>       <analyzer type="index">
> > >>>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
> > >>>         <filter class="solr.LowerCaseFilterFactory"/>
> > >>>         <filter class="solr.SnowballPorterFilterFactory"/>
> > >>>       </analyzer>
> > >>>       <analyzer type="query">
> > >>>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
> > >>>         <filter class="solr.LowerCaseFilterFactory"/>
> > >>>         <filter class="solr.SnowballPorterFilterFactory"/>
> > >>>       </analyzer>
> > >>>     </fieldType>
> > >>>   </types>
> > >>> </schema>
> > >>>
> > >>
> >
>

Re: Child doc question

Posted by Alessandro Benedetti <a....@sease.io>.
Hi Stephen,
I have been using nested documents and the various types of join multiple
times in the past.
Let's assume you can use the block join.
First of all you need to follow the indexing approach that aims to index a
parent and children within the same block:

https://solr.apache.org/guide/8_10/indexing-nested-documents.html

Then let's see the various use cases you mentioned:


*keyword search for /lemon apple/ and onlyreturn the parent;*
Do you want to match on children and then only return the parents?
https://solr.apache.org/guide/8_10/other-parsers.html#block-join-parent-query-parser

Do you just want to match the parents? then just run the query on the
parent field you like and add a 'fq' filtering by the document type
(fq='type": "post")

* /lemon lime/ and return the parent and comment1;*
*/lemon pear/ and return the parent and comment2;*
I guess you can achieve this just by running a normal multi-field query,
for example using the edismax query parser(
https://solr.apache.org/guide/6_6/the-extended-dismax-query-parser.html)
and both:
comment_en and post_en as qf(query fields).
*N.B.* nested documents are just separate Lucene documents after all, so
you can retrieve them indepentently of block join query parsers.


* /lime pear/ and return the*
*parent, comment1, and comment2.*
You go with a
https://solr.apache.org/guide/8_10/other-parsers.html#block-join-parent-query-parser
to
retrieve the parents of fitting children and play with the
https://solr.apache.org/guide/8_10/transforming-result-documents.html#child-childdoctransformerfactory
to retrieve the related matching children.
The easiest approach involves the transformer to just return all children,
in your case you may want to play with the childFilter, to only return
matching children.
If the transformer won't solve your exact use case, I recommend you combine
the parent query parser in OR with a classic query on the children.


* And /lime gum/ should return nothing (as ifit were an AND query).*
For this, I don't think your data model design(nested docs) fits the
requirement, you may need to flatten the data.

You can find more details about scoring:
https://solr.apache.org/guide/8_10/other-parsers.html#scoring-with-the-block-join-parent-query-parser
<https://solr.apache.org/guide/8_10/other-parsers.html#scoring-with-the-block-join-parent-query-parser>

Hope this helped!

Cheers
--------------------------
Alessandro Benedetti
Apache Lucene/Solr Committer
Director, R&D Software Engineer, Search Consultant

www.sease.io


On Wed, 3 Nov 2021 at 20:58, Stephen Lewis Bianamara <
stephen.bianamara@gmail.com> wrote:

> Hi Folks,
>
> Going to give this one more shot. Is there anyone out there who understands
> child docs well enough to answer this basic question?
>
> Thanks,
> Stephen
>
> On Fri, Oct 29, 2021 at 2:56 PM Stephen Lewis Bianamara <
> stephen.bianamara@gmail.com> wrote:
>
> > Hi SOLR Community,
> >
> > Still hoping for help on this. Is there anyone out there who understands
> > child docs well enough to answer the question of "yes this should work"
> or
> > "no it cannot work"?
> >
> > Thanks,
> > Stephen
> >
> > On Wed, Oct 27, 2021 at 8:51 AM Stephen Lewis Bianamara <
> > stephen.bianamara@gmail.com> wrote:
> >
> >> Hi Folks,
> >>
> >> Wanted to follow up here. Can someone help me just answer whether what
> >> I'm hoping for is feasible?
> >>
> >> (a) The desired outcome is supported with the right model/queries
> >> (b) The desired outcome is not supported; maybe it could be in the
> future
> >> (c) The desired outcome is fundamentally unsupportable for the
> >> foreseeable future
> >>
> >> To summarize, the desired behavior is:
> >>
> >> - Query which can AND across child docs (i.e, return parents
> >> whos children match an AND query even if tokens are spread across
> children)
> >> - Query whose parents are returned based on relevance of the children
> >>
> >> In my example, obviously there is parent data being queried ("post_en"),
> >> but the parent data could easily be made child data if need be.
> >>
> >> Thanks!
> >> Stephen
> >>
> >> On Mon, Oct 25, 2021 at 6:54 AM Stephen Lewis Bianamara <
> >> stephen.bianamara@gmail.com> wrote:
> >>
> >>> Hi SOLR Community,
> >>>
> >>> I'm experimenting with solr 8.10 and trying to get a query pattern with
> >>> child docs to work. An example of a nested document structure I'd like
> to
> >>> search is below. In this example, there will only be two levels, child
> of
> >>> type:post and /comments children.
> >>> {
> >>>     "id": "post1",
> >>>     "type": "post",
> >>>     "post_en": "I put lemon on my apple slices to keep them fresh",
> >>>     "comments": [
> >>>         {
> >>>             "id": "comment1",
> >>>             "type": "comment",
> >>>             "comment_en": "Lime works too"
> >>>         },
> >>>         {
> >>>             "id": "comment2",
> >>>             "type": "comment",
> >>>             "comment_en": "Does it work for pears?"
> >>>         }
> >>>     ]
> >>> }
> >>>
> >>> What I'd like is to be able to do keyword search for /lemon apple/ and
> >>> only return the parent; /lemon lime/ and return the parent and
> comment1;
> >>> /lemon pear/ and return the parent and comment2; /lime pear/ and
> return the
> >>> parent, comment1, and comment2. And /lime gum/ should return nothing
> (as if
> >>> it were an AND query). Additionally, this should all be done with
> relevance.
> >>>
> >>> I've tried a few combinations of nested docs from this documentation
> >>> <https://solr.apache.org/guide/8_10/searching-nested-documents.html>,
> >>> but am having trouble getting this to work. I wonder if I'm asking more
> >>> from block join/child doc transformer than it currently supports, or
> >>> perhaps I'm just missing something. Can someone familiar with nesting
> >>> documents help me out? I've included my schema below as well.
> >>>
> >>> Thanks!
> >>> Stephen
> >>>
> >>> <?xml version="1.0" encoding="UTF-8" ?>
> >>> <schema name="ChildTest" version="1.5">
> >>>   <fields>
> >>>     <field name="id" type="string" required="true" docValues="true"/>
> >>>     <dynamicField name="*_en" type="text_en" large="true"
> >>> omitNorms="true" />
> >>>     <field name="username" type="string" docValues="true" />
> >>>     <field name="type" type="string" docValues="true" />
> >>>     <field name="_version_" type="long" />
> >>>     <!-- child docs -->
> >>>     <field name="_root_" type="string" indexed="true" stored="false"
> >>> docValues="false" />
> >>>     <field name="_nest_path_" type="_nest_path_" />
> >>>     <field name="_nest_parent_" type="string" indexed="true"
> >>> stored="true" />
> >>>   </fields>
> >>>   <uniqueKey>id</uniqueKey>
> >>>   <types>
> >>>     <fieldType name="_nest_path_" class="solr.NestPathField" />
> >>>     <fieldType name="long" class="solr.LongPointField" />
> >>>     <fieldType name="string" class="solr.StrField"
> >>> sortMissingLast="true" />
> >>>     <fieldType name="text_en" class="solr.TextField"
> >>> positionIncrementGap="100" autoGeneratePhraseQueries="true">
> >>>       <analyzer type="index">
> >>>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
> >>>         <filter class="solr.LowerCaseFilterFactory"/>
> >>>         <filter class="solr.SnowballPorterFilterFactory"/>
> >>>       </analyzer>
> >>>       <analyzer type="query">
> >>>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
> >>>         <filter class="solr.LowerCaseFilterFactory"/>
> >>>         <filter class="solr.SnowballPorterFilterFactory"/>
> >>>       </analyzer>
> >>>     </fieldType>
> >>>   </types>
> >>> </schema>
> >>>
> >>
>

Re: Child doc question

Posted by Stephen Lewis Bianamara <st...@gmail.com>.
Hi Folks,

Going to give this one more shot. Is there anyone out there who understands
child docs well enough to answer this basic question?

Thanks,
Stephen

On Fri, Oct 29, 2021 at 2:56 PM Stephen Lewis Bianamara <
stephen.bianamara@gmail.com> wrote:

> Hi SOLR Community,
>
> Still hoping for help on this. Is there anyone out there who understands
> child docs well enough to answer the question of "yes this should work" or
> "no it cannot work"?
>
> Thanks,
> Stephen
>
> On Wed, Oct 27, 2021 at 8:51 AM Stephen Lewis Bianamara <
> stephen.bianamara@gmail.com> wrote:
>
>> Hi Folks,
>>
>> Wanted to follow up here. Can someone help me just answer whether what
>> I'm hoping for is feasible?
>>
>> (a) The desired outcome is supported with the right model/queries
>> (b) The desired outcome is not supported; maybe it could be in the future
>> (c) The desired outcome is fundamentally unsupportable for the
>> foreseeable future
>>
>> To summarize, the desired behavior is:
>>
>> - Query which can AND across child docs (i.e, return parents
>> whos children match an AND query even if tokens are spread across children)
>> - Query whose parents are returned based on relevance of the children
>>
>> In my example, obviously there is parent data being queried ("post_en"),
>> but the parent data could easily be made child data if need be.
>>
>> Thanks!
>> Stephen
>>
>> On Mon, Oct 25, 2021 at 6:54 AM Stephen Lewis Bianamara <
>> stephen.bianamara@gmail.com> wrote:
>>
>>> Hi SOLR Community,
>>>
>>> I'm experimenting with solr 8.10 and trying to get a query pattern with
>>> child docs to work. An example of a nested document structure I'd like to
>>> search is below. In this example, there will only be two levels, child of
>>> type:post and /comments children.
>>> {
>>>     "id": "post1",
>>>     "type": "post",
>>>     "post_en": "I put lemon on my apple slices to keep them fresh",
>>>     "comments": [
>>>         {
>>>             "id": "comment1",
>>>             "type": "comment",
>>>             "comment_en": "Lime works too"
>>>         },
>>>         {
>>>             "id": "comment2",
>>>             "type": "comment",
>>>             "comment_en": "Does it work for pears?"
>>>         }
>>>     ]
>>> }
>>>
>>> What I'd like is to be able to do keyword search for /lemon apple/ and
>>> only return the parent; /lemon lime/ and return the parent and comment1;
>>> /lemon pear/ and return the parent and comment2; /lime pear/ and return the
>>> parent, comment1, and comment2. And /lime gum/ should return nothing (as if
>>> it were an AND query). Additionally, this should all be done with relevance.
>>>
>>> I've tried a few combinations of nested docs from this documentation
>>> <https://solr.apache.org/guide/8_10/searching-nested-documents.html>,
>>> but am having trouble getting this to work. I wonder if I'm asking more
>>> from block join/child doc transformer than it currently supports, or
>>> perhaps I'm just missing something. Can someone familiar with nesting
>>> documents help me out? I've included my schema below as well.
>>>
>>> Thanks!
>>> Stephen
>>>
>>> <?xml version="1.0" encoding="UTF-8" ?>
>>> <schema name="ChildTest" version="1.5">
>>>   <fields>
>>>     <field name="id" type="string" required="true" docValues="true"/>
>>>     <dynamicField name="*_en" type="text_en" large="true"
>>> omitNorms="true" />
>>>     <field name="username" type="string" docValues="true" />
>>>     <field name="type" type="string" docValues="true" />
>>>     <field name="_version_" type="long" />
>>>     <!-- child docs -->
>>>     <field name="_root_" type="string" indexed="true" stored="false"
>>> docValues="false" />
>>>     <field name="_nest_path_" type="_nest_path_" />
>>>     <field name="_nest_parent_" type="string" indexed="true"
>>> stored="true" />
>>>   </fields>
>>>   <uniqueKey>id</uniqueKey>
>>>   <types>
>>>     <fieldType name="_nest_path_" class="solr.NestPathField" />
>>>     <fieldType name="long" class="solr.LongPointField" />
>>>     <fieldType name="string" class="solr.StrField"
>>> sortMissingLast="true" />
>>>     <fieldType name="text_en" class="solr.TextField"
>>> positionIncrementGap="100" autoGeneratePhraseQueries="true">
>>>       <analyzer type="index">
>>>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>>         <filter class="solr.LowerCaseFilterFactory"/>
>>>         <filter class="solr.SnowballPorterFilterFactory"/>
>>>       </analyzer>
>>>       <analyzer type="query">
>>>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>>         <filter class="solr.LowerCaseFilterFactory"/>
>>>         <filter class="solr.SnowballPorterFilterFactory"/>
>>>       </analyzer>
>>>     </fieldType>
>>>   </types>
>>> </schema>
>>>
>>

Re: Child doc question

Posted by Stephen Lewis Bianamara <st...@gmail.com>.
Hi SOLR Community,

Still hoping for help on this. Is there anyone out there who understands
child docs well enough to answer the question of "yes this should work" or
"no it cannot work"?

Thanks,
Stephen

On Wed, Oct 27, 2021 at 8:51 AM Stephen Lewis Bianamara <
stephen.bianamara@gmail.com> wrote:

> Hi Folks,
>
> Wanted to follow up here. Can someone help me just answer whether what I'm
> hoping for is feasible?
>
> (a) The desired outcome is supported with the right model/queries
> (b) The desired outcome is not supported; maybe it could be in the future
> (c) The desired outcome is fundamentally unsupportable for the
> foreseeable future
>
> To summarize, the desired behavior is:
>
> - Query which can AND across child docs (i.e, return parents whos children
> match an AND query even if tokens are spread across children)
> - Query whose parents are returned based on relevance of the children
>
> In my example, obviously there is parent data being queried ("post_en"),
> but the parent data could easily be made child data if need be.
>
> Thanks!
> Stephen
>
> On Mon, Oct 25, 2021 at 6:54 AM Stephen Lewis Bianamara <
> stephen.bianamara@gmail.com> wrote:
>
>> Hi SOLR Community,
>>
>> I'm experimenting with solr 8.10 and trying to get a query pattern with
>> child docs to work. An example of a nested document structure I'd like to
>> search is below. In this example, there will only be two levels, child of
>> type:post and /comments children.
>> {
>>     "id": "post1",
>>     "type": "post",
>>     "post_en": "I put lemon on my apple slices to keep them fresh",
>>     "comments": [
>>         {
>>             "id": "comment1",
>>             "type": "comment",
>>             "comment_en": "Lime works too"
>>         },
>>         {
>>             "id": "comment2",
>>             "type": "comment",
>>             "comment_en": "Does it work for pears?"
>>         }
>>     ]
>> }
>>
>> What I'd like is to be able to do keyword search for /lemon apple/ and
>> only return the parent; /lemon lime/ and return the parent and comment1;
>> /lemon pear/ and return the parent and comment2; /lime pear/ and return the
>> parent, comment1, and comment2. And /lime gum/ should return nothing (as if
>> it were an AND query). Additionally, this should all be done with relevance.
>>
>> I've tried a few combinations of nested docs from this documentation
>> <https://solr.apache.org/guide/8_10/searching-nested-documents.html>,
>> but am having trouble getting this to work. I wonder if I'm asking more
>> from block join/child doc transformer than it currently supports, or
>> perhaps I'm just missing something. Can someone familiar with nesting
>> documents help me out? I've included my schema below as well.
>>
>> Thanks!
>> Stephen
>>
>> <?xml version="1.0" encoding="UTF-8" ?>
>> <schema name="ChildTest" version="1.5">
>>   <fields>
>>     <field name="id" type="string" required="true" docValues="true"/>
>>     <dynamicField name="*_en" type="text_en" large="true"
>> omitNorms="true" />
>>     <field name="username" type="string" docValues="true" />
>>     <field name="type" type="string" docValues="true" />
>>     <field name="_version_" type="long" />
>>     <!-- child docs -->
>>     <field name="_root_" type="string" indexed="true" stored="false"
>> docValues="false" />
>>     <field name="_nest_path_" type="_nest_path_" />
>>     <field name="_nest_parent_" type="string" indexed="true"
>> stored="true" />
>>   </fields>
>>   <uniqueKey>id</uniqueKey>
>>   <types>
>>     <fieldType name="_nest_path_" class="solr.NestPathField" />
>>     <fieldType name="long" class="solr.LongPointField" />
>>     <fieldType name="string" class="solr.StrField" sortMissingLast="true"
>> />
>>     <fieldType name="text_en" class="solr.TextField"
>> positionIncrementGap="100" autoGeneratePhraseQueries="true">
>>       <analyzer type="index">
>>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>         <filter class="solr.LowerCaseFilterFactory"/>
>>         <filter class="solr.SnowballPorterFilterFactory"/>
>>       </analyzer>
>>       <analyzer type="query">
>>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>         <filter class="solr.LowerCaseFilterFactory"/>
>>         <filter class="solr.SnowballPorterFilterFactory"/>
>>       </analyzer>
>>     </fieldType>
>>   </types>
>> </schema>
>>
>

Re: Child doc question

Posted by Stephen Lewis Bianamara <st...@gmail.com>.
Hi Folks,

Wanted to follow up here. Can someone help me just answer whether what I'm
hoping for is feasible?

(a) The desired outcome is supported with the right model/queries
(b) The desired outcome is not supported; maybe it could be in the future
(c) The desired outcome is fundamentally unsupportable for the
foreseeable future

To summarize, the desired behavior is:

- Query which can AND across child docs (i.e, return parents whos children
match an AND query even if tokens are spread across children)
- Query whose parents are returned based on relevance of the children

In my example, obviously there is parent data being queried ("post_en"),
but the parent data could easily be made child data if need be.

Thanks!
Stephen

On Mon, Oct 25, 2021 at 6:54 AM Stephen Lewis Bianamara <
stephen.bianamara@gmail.com> wrote:

> Hi SOLR Community,
>
> I'm experimenting with solr 8.10 and trying to get a query pattern with
> child docs to work. An example of a nested document structure I'd like to
> search is below. In this example, there will only be two levels, child of
> type:post and /comments children.
> {
>     "id": "post1",
>     "type": "post",
>     "post_en": "I put lemon on my apple slices to keep them fresh",
>     "comments": [
>         {
>             "id": "comment1",
>             "type": "comment",
>             "comment_en": "Lime works too"
>         },
>         {
>             "id": "comment2",
>             "type": "comment",
>             "comment_en": "Does it work for pears?"
>         }
>     ]
> }
>
> What I'd like is to be able to do keyword search for /lemon apple/ and
> only return the parent; /lemon lime/ and return the parent and comment1;
> /lemon pear/ and return the parent and comment2; /lime pear/ and return the
> parent, comment1, and comment2. And /lime gum/ should return nothing (as if
> it were an AND query). Additionally, this should all be done with relevance.
>
> I've tried a few combinations of nested docs from this documentation
> <https://solr.apache.org/guide/8_10/searching-nested-documents.html>, but
> am having trouble getting this to work. I wonder if I'm asking more from
> block join/child doc transformer than it currently supports, or perhaps I'm
> just missing something. Can someone familiar with nesting documents help me
> out? I've included my schema below as well.
>
> Thanks!
> Stephen
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <schema name="ChildTest" version="1.5">
>   <fields>
>     <field name="id" type="string" required="true" docValues="true"/>
>     <dynamicField name="*_en" type="text_en" large="true" omitNorms="true"
> />
>     <field name="username" type="string" docValues="true" />
>     <field name="type" type="string" docValues="true" />
>     <field name="_version_" type="long" />
>     <!-- child docs -->
>     <field name="_root_" type="string" indexed="true" stored="false"
> docValues="false" />
>     <field name="_nest_path_" type="_nest_path_" />
>     <field name="_nest_parent_" type="string" indexed="true" stored="true"
> />
>   </fields>
>   <uniqueKey>id</uniqueKey>
>   <types>
>     <fieldType name="_nest_path_" class="solr.NestPathField" />
>     <fieldType name="long" class="solr.LongPointField" />
>     <fieldType name="string" class="solr.StrField" sortMissingLast="true"
> />
>     <fieldType name="text_en" class="solr.TextField"
> positionIncrementGap="100" autoGeneratePhraseQueries="true">
>       <analyzer type="index">
>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>         <filter class="solr.LowerCaseFilterFactory"/>
>         <filter class="solr.SnowballPorterFilterFactory"/>
>       </analyzer>
>       <analyzer type="query">
>         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>         <filter class="solr.LowerCaseFilterFactory"/>
>         <filter class="solr.SnowballPorterFilterFactory"/>
>       </analyzer>
>     </fieldType>
>   </types>
> </schema>
>