You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Jan H��ydahl <ja...@apache.org> on 2018/03/14 12:56:05 UTC

Re: [nesting] Any way to return the whole hierarchical structure when doing Block Join queries?

I understand that the [subquery] transformer can help build a nested response when you know the structure in advance, but what if you have some BlockJoin indexed structure with grand children (as the original question in this thread), and you want to reconstruct the full document based on what is returned by the {!parent} query? I cannot see how to use [subquery] to do this?

Jan

On 2016/03/24 20:52:51, Mikhail Khludnev <mk...@griddynamics.com> wrote: 
> I think you cal already kick tires and contribute a test case into
> https://issues.apache.org/jira/browse/SOLR-8208 that's already reachable
> there I believe, but I still working on core design.
> 
> On Thu, Mar 24, 2016 at 10:02 PM, Alisa Z. <pr...@mail.ru> wrote:
> 
> >  Hi all,
> >
> > I apologize for duplicating my previous message:
> > Solr 5.3:  anything similar to ChildDocTransformerFactory  that does not
> > flatten the hierarchical structure?
> >
> > However, it is still an open and interesting question:
> >
> > Following the example from  https://dzone.com/articles/using-solr-49-new
> > , let's say we are given multiple-level nested structure:
> >
> > <doc>
> >         <field name="id">1</field>
> >         <field name="name">I am the parent</field>
> >         <field name="cat">PARENT</field>
> >         <doc>
> >                 <field name="id">1.1</field>
> >                 <field name="name">I am the 1st child</field>
> >                 <field name="cat">CHILD</field>
> >         </doc>
> >         <doc>
> >                 <field name="id">1.2</field>
> >                 <field name="name">I am the 2nd child</field>
> >                 <field name="cat">CHILD</field>
> >                 <doc>
> >                         <field name="id">1.2.1</field>
> >                         <field name="name">I am a grandchildren</field>
> >                         <field name="cat">GRANDCHILD</field>
> >                 </doc>
> >         </doc>
> > </doc>
> >
> >
> > Querying
> > q={!parent which="cat:PARENT"}name:(I am +child)&fl=id,name,[child
> > parentFilter=cat:PARENT]
> >
> > will return flattened structure, where cat:CHILD and cat:GRANDCHILD
> > documents end up on the same level:
> > <doc>
> >         <field name="id">1</field>
> >         <field name="name">I am the parent</field>
> >         <field name="cat">PARENT</field>
> >         <doc>
> >                 <field name="id">1.1</field>
> >                 <field name="name">I am the 1st child</field>
> >                 <field name="cat">CHILD</field>
> >         </doc>
> >         <doc>
> >                 <field name="id">1.2</field>
> >                 <field name="name">I am the 2nd child</field>
> >                 <field name="cat">CHILD</field>
> >         </doc>
> >         <doc>
> >                 <field name="id">1.2.1</field>
> >                 <field name="name">I am a grandchildren</field>
> >                 <field name="cat">GRANDCHILD</field>
> >         </doc>
> > </doc> Indeed, the JAVAdocs for ChildDocTransformerFactory say: "This
> > transformer returns all descendants of each parent document in a flat list
> > nested inside the parent document".
> >
> > Yet is there any way to preserve the hierarchy in the response? I really
> > need to find the way to preserve the structure in the response.
> >
> > Thank you in advance!
> >
> > --
> > Alisa Zhila
> > ----------------------------------------------------------------------
> >
> 
> 
> 
> -- 
> Sincerely yours
> Mikhail Khludnev
> Principal Engineer,
> Grid Dynamics
> 
> <http://www.griddynamics.com>
> <mk...@griddynamics.com>
> 

Re: [nesting] Any way to return the whole hierarchical structure when doing Block Join queries?

Posted by Jan Høydahl <ja...@apache.org>.
I tried to index a 3-level nested Block and expected the "1.2.1" document to have _root_=1.2 but it had the top-document as root. If each doc in addition would have a _parent_=<id> field pointing to its nearest parent, then it would be possible to extend the [child] doc transformer to reconstruct the correct level. Risk is of course that you may construct such a query that would only bring back GRANDCHILD docs, but in that case the [child] transformer could go fetch the CHILD since it would have its id, and nest itself all the way to the _root_ until the full doc is reconstructed? Any thoughts on this approach? In what phase would we need to add the _parent_ field?

--
Jan Høydahl

> 14. mar. 2018 kl. 13:56 skrev Jan Høydahl <ja...@apache.org>:
> 
> I understand that the [subquery] transformer can help build a nested response when you know the structure in advance, but what if you have some BlockJoin indexed structure with grand children (as the original question in this thread), and you want to reconstruct the full document based on what is returned by the {!parent} query? I cannot see how to use [subquery] to do this?
> 
> Jan
> 
> On 2016/03/24 20:52:51, Mikhail Khludnev <mk...@griddynamics.com> wrote: 
>> I think you cal already kick tires and contribute a test case into
>> https://issues.apache.org/jira/browse/SOLR-8208 that's already reachable
>> there I believe, but I still working on core design.
>> 
>> On Thu, Mar 24, 2016 at 10:02 PM, Alisa Z. <pr...@mail.ru> wrote:
>> 
>>> Hi all,
>>> 
>>> I apologize for duplicating my previous message:
>>> Solr 5.3:  anything similar to ChildDocTransformerFactory  that does not
>>> flatten the hierarchical structure?
>>> 
>>> However, it is still an open and interesting question:
>>> 
>>> Following the example from  https://dzone.com/articles/using-solr-49-new
>>> , let's say we are given multiple-level nested structure:
>>> 
>>> <doc>
>>>        <field name="id">1</field>
>>>        <field name="name">I am the parent</field>
>>>        <field name="cat">PARENT</field>
>>>        <doc>
>>>                <field name="id">1.1</field>
>>>                <field name="name">I am the 1st child</field>
>>>                <field name="cat">CHILD</field>
>>>        </doc>
>>>        <doc>
>>>                <field name="id">1.2</field>
>>>                <field name="name">I am the 2nd child</field>
>>>                <field name="cat">CHILD</field>
>>>                <doc>
>>>                        <field name="id">1.2.1</field>
>>>                        <field name="name">I am a grandchildren</field>
>>>                        <field name="cat">GRANDCHILD</field>
>>>                </doc>
>>>        </doc>
>>> </doc>
>>> 
>>> 
>>> Querying
>>> q={!parent which="cat:PARENT"}name:(I am +child)&fl=id,name,[child
>>> parentFilter=cat:PARENT]
>>> 
>>> will return flattened structure, where cat:CHILD and cat:GRANDCHILD
>>> documents end up on the same level:
>>> <doc>
>>>        <field name="id">1</field>
>>>        <field name="name">I am the parent</field>
>>>        <field name="cat">PARENT</field>
>>>        <doc>
>>>                <field name="id">1.1</field>
>>>                <field name="name">I am the 1st child</field>
>>>                <field name="cat">CHILD</field>
>>>        </doc>
>>>        <doc>
>>>                <field name="id">1.2</field>
>>>                <field name="name">I am the 2nd child</field>
>>>                <field name="cat">CHILD</field>
>>>        </doc>
>>>        <doc>
>>>                <field name="id">1.2.1</field>
>>>                <field name="name">I am a grandchildren</field>
>>>                <field name="cat">GRANDCHILD</field>
>>>        </doc>
>>> </doc> Indeed, the JAVAdocs for ChildDocTransformerFactory say: "This
>>> transformer returns all descendants of each parent document in a flat list
>>> nested inside the parent document".
>>> 
>>> Yet is there any way to preserve the hierarchy in the response? I really
>>> need to find the way to preserve the structure in the response.
>>> 
>>> Thank you in advance!
>>> 
>>> --
>>> Alisa Zhila
>>> ----------------------------------------------------------------------
>>> 
>> 
>> 
>> 
>> -- 
>> Sincerely yours
>> Mikhail Khludnev
>> Principal Engineer,
>> Grid Dynamics
>> 
>> <http://www.griddynamics.com>
>> <mk...@griddynamics.com>
>>