[ 
https://issues.apache.org/jira/browse/SOLR-15213?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James Ashbourne updated SOLR-15213:
-----------------------------------
    Description: 
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 and merge if it is 
present.

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.

 

 

  was:
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 with merging if it is 
present.

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.

 

 


> 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
>      Security Level: Public(Default Security Level. Issues are Public) 
>            Reporter: James Ashbourne
>            Priority: Major
>         Attachments: solr-merge.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 and merge if it is 
> present.
> 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-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to