You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@solr.apache.org by "David Smiley (Jira)" <ji...@apache.org> on 2021/10/31 02:42:00 UTC

[jira] [Commented] (SOLR-15213) Add support for "merge" atomic update operation for child documents

    [ https://issues.apache.org/jira/browse/SOLR-15213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17436395#comment-17436395 ] 

David Smiley commented on SOLR-15213:
-------------------------------------

Hi James, thanks for contributing!

I took a look at the patch in some detail.  I'm wondering if this functionality could reasonably be incorporated into "add".  If the value to add is a SolrInputDocument, activate this functionality.  When the SID is not an atomic update type, then it replaces an existing doc by the same ID if present or adds it when not present.  Otherwise (an atomic update) the operations are performed on the existing document and we insist that the document already exist.  Would that satisfy your use-case?

> Add support for "merge" atomic update operation for child documents
> -------------------------------------------------------------------
>
>                 Key: SOLR-15213
>                 URL: https://issues.apache.org/jira/browse/SOLR-15213
>             Project: Solr
>          Issue Type: New Feature
>            Reporter: James Ashbourne
>            Priority: Major
>         Attachments: SOLR-15213.patch
>
>
> Solr has "add", "set", "add-distinct" which work but all have their limitations. Namely, there's currently no way to atomically update a document where that document may or may not be present already by merging if it is present and inserting if it isn't.
> i.e. in the scenario where we have a document with two nested children: 
>   
> {noformat}
> {"id": "ocean1", 
> "_isParent":"true", 
> "fish": [ 
>     {
>      "id": "fish1", 
>      "type_s": "fish", 
>      "name_s": "Doe", 
>      "_isParent":"false"}, 
>     {
>      "id": "fish2", 
>      "type_s": "fish", 
>      "name_s": "Hans", 
>      "_isParent":"false"}]
> }{noformat}
>  
>  If we later want to update that child doc e.g.:
> {noformat}
> {"id": "ocean1", 
> "_isParent":"true", 
> "fish": [ 
>     {
>      "id": "fish1", 
>      "type_s": "fish", 
>      "name_s": "James", // new name
>      "_isParent":"false"}, 
> ]
> }{noformat}
>  
>  Existing operations:
>  - "add" - will add another nested doc with the same id leaving us with two children with the same id.
>  - "set" - replaces the whole list of child docs with the single doc, we could use this but would first have to fetch all the existing children.
>  - "add-distinct" - will reject the update based on the doc already being present.
> I've got some changes (see patch) that a new option "merge" which checks based on the id and merges the new document with the old with a fall back to add if there is no id match.
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@solr.apache.org
For additional commands, e-mail: issues-help@solr.apache.org