Thanks, Indeed, the subject line was misleading. Then I will file a new improvement request for "block atomic update support".
On Tue, Mar 18, 2014 at 2:08 PM, Jack Krupansky <j...@basetechnology.com>wrote: > That's a reasonable request and worth a Jira, but different from what you > have specified in your subject line: "re-indexing a single document" - the > entire block needs to be re-indexed. > > I suppose people might want a "block atomic update" - where multiple child > documents as well as the parent document can be updated with one rewrite of > the entire block, and maybe some way to delete individual child documents > as well. > > -- Jack Krupansky > > -----Original Message----- From: danny teichthal > Sent: Tuesday, March 18, 2014 3:58 AM > To: solr-user@lucene.apache.org > Subject: Re: Nested documents, block join - re-indexing a single document > upon update > > > Thanks Jack, > I understand that updating a single document on a block is currently not > supported. > But, atomic update to a single document does not have to be in conflict > with block joins. > > If I got it right from the documentation: > Currently, If a document is atomically updated, SOLR finds the stored > document, and re index it, changing only the fields that were specified as > update="<operation>". > > It looked intuitive that if we specify the _root_ while using atomic > update, SOLR will find the whole block by _root_, update the changed > document, and re-index the whole block. > > Of course I cannot estimate the feasibility and effort of implementing it, > but it looks like a nice enhancement. > > > > On Sun, Mar 16, 2014 at 4:09 PM, Jack Krupansky <j...@basetechnology.com> > wrote: > > You stumbled upon the whole point of block join - that the documents are >> and must be managed as a block and not individually. >> >> -- Jack Krupansky >> >> From: danny teichthal >> Sent: Sunday, March 16, 2014 6:47 AM >> To: solr-user@lucene.apache.org >> Subject: Nested documents, block join - re-indexing a single document upon >> update >> >> >> >> >> Hi All, >> >> >> >> >> To make things short, I would like to use block joins, but to be able to >> index each document on the block separately. >> >> Is it possible? >> >> >> >> In more details: >> >> >> >> We have some nested parent-child structure where: >> >> 1. Parent may have a single level of children >> >> 2. Parent and child documents may be updated independently. >> >> 3. We may want to search for parent by child info and vise versa. >> >> >> >> At first we thought of managing the parent and child in different >> documents, de-normalizing child data at parent level and parent data on >> child level. >> >> After reading Mikhail blog >> http://blog.griddynamics.com/2013/09/solr-block-join-support.html, we >> thought of using the block join for this purpose. >> >> >> >> But, I got into a wall when trying to update a single child document. >> >> For me, it's ok if SOLR will internally index the whole block, I just >> don't want to fetch the whole hierarchy from DB for update. >> >> >> >> I was trying to achieve this using atomic updates - since all the fields >> must be stored anyway - if I send an atomic update on one of the children >> with the _root_ field then there's no need to send the whole hierarchy. >> >> But, when I try this method, I see that the child document is indeed >> updated, but it's order is changed to be after the parent. >> >> >> >> This is what I did: >> >> 1. Change the root field to be stored - <field name="_root_" >> type="string" indexed="true" stored="true"/> >> >> 2. Put attached docs on example\exampledocs. >> >> 3. Run post.jar on parent-child.xml >> >> 4. Run post.jar on update-child-atomic.xml. >> >> 5. Now - >> http://localhost:8983/solr/collection1/select?q=%7B! >> parent+which%3D%27type_s%3Aparent%27%7D%2BCOLOR_s% >> 3ARed+%2BSIZE_s%3AXL%0A&wt=json&indent=true, >> returns parent 10 as expected. >> >> 6. But, >> http://localhost:8983/solr/collection1/select?q={!parent+ >> which%3D'type_s%3Aparent'}%2BCOLOR_s%3AGreen+%2BSIZE_s% >> 3AXL%0A&wt=json&indent=true-<http://localhost:8983/solr/collection1/select?q=%7B!parent+which%3D'type_s%3Aparent'%7D%2BCOLOR_s%3AGreen+%2BSIZE_s%3AXL%0A&wt=json&indent=true->returns >> nothing. >> >> >> 7. When searching *:* on Admin, record with id=12 was updated with >> 'Green', but it is returned below the parent record. >> >> 8. >> >> >> >> Thanks in advance. >> >> >> >> In case the attachments does not work: >> >> 1st file to post: >> >> >> >> <update> >> >> <delete><query>*:*</query></delete> >> >> <add> >> >> <doc> >> >> <field name="id">10</field> >> >> <field name="type_s">parent</field> >> >> <field name="BRAND_s">Nike</field> >> >> <doc> >> >> <field name="id">11</field> >> >> <field name="COLOR_s">Red</field> >> >> <field name="SIZE_s">XL</field> >> >> </doc> >> >> <doc> >> >> <field name="id">12</field> >> >> <field name="COLOR_s">Blue</field> >> >> <field name="SIZE_s">XL</field> >> >> </doc> >> >> </doc> >> >> </add> >> >> <commit/> >> >> </update> >> >> >> >> >> >> >> >> 2nd file: >> >> >> >> <update> >> >> <add> >> >> <doc> >> >> <field name="id">12</field> >> >> <field name="COLOR_s" update="set">Green</field> >> >> <field name="SIZE_s">XL</field> >> >> <field name="_root_" >10</field> >> >> </doc> >> >> </doc> >> >> </add> >> >> <commit/> >> >> </update> >> >> >> >