You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@solr.apache.org by "Endika Posadas (Jira)" <ji...@apache.org> on 2021/11/04 10:04: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=17438602#comment-17438602 ] 

Endika Posadas commented on SOLR-15213:
---------------------------------------

Hi David, I'm replying on behalf of James.
Yes, the functionality can perfectly be incorporated into "add". The sole reason why it was implemented separately was to prevent breaking any existing functionality we didn't know about. 
Your solution sounds good although there's one edge case that is not supported: For parent documents we can do an 'upsert' type of update, i.e. send an atomic update and update the document or insert a new one if it doesn't exist. However, that wouldn't be supported for child documents; they can be atomically updated or replaced, but not with a single request.
Why not allow the atomic update operation to insert the child document if it doesn't exist?
thanks!


> 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