[ 
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to