In this post, I am going to explain how
to update a document partially. Elasticsearch provides ‘_update’ endpoint to
support partial updates.
For Example
GET
xyz/employees/1
Above
request return following document.
{ "_index": "xyz", "_type": "employees", "_id": "1", "_version": 1, "found": true, "_source": { "firstName": "Phalgun", "lastName": "Garimella", "hobbies": [ "Watching movies", "Stamp collection", "Reading books", "Playing Cricket" ], "age": 30 } }
I want to
update firstName to “Pradeep”, lastName to “Deshala”.
POST xyz/employees/1/_update { "doc":{ "firstName" : "Pradeep", "lastName" : "Deshala" } }
As you observe POST request, we are
sending a partial document to “_update” endpoint.
GET xyz/employees/1 { "_index": "xyz", "_type": "employees", "_id": "1", "_version": 2, "found": true, "_source": { "firstName": "Pradeep", "lastName": "Deshala", "hobbies": [ "Watching movies", "Stamp collection", "Reading books", "Playing Cricket" ], "age": 30 } }
Update hobbies
POST xyz/employees/1/_update { "doc":{ "hobbies" :[ "Mobile App development", "Gaming" ] } }
Now get the
document.
GET xyz/employees/1 { "_index": "xyz", "_type": "employees", "_id": "1", "_version": 3, "found": true, "_source": { "firstName": "Pradeep", "lastName": "Deshala", "hobbies": [ "Mobile App development", "Gaming" ], "age": 30 } }
As you observe hobbies are completely
overwritten, not appended.
Adding
new fields
Suppose you want to add “city” field to
document, you just add it using _update endpoint.
POST xyz/employees/1/_update { "doc":{ "city" : "Bangalore" } }
Now get the
document.
GET xyz/employees/1 { "_index": "xyz", "_type": "employees", "_id": "1", "_version": 4, "found": true, "_source": { "firstName": "Pradeep", "lastName": "Deshala", "hobbies": [ "Mobile App development", "Gaming" ], "age": 30, "city": "Bangalore" } }
As you
observe city field is added to the document.
No comments:
Post a Comment