# Update(upsert) with query support

**URL:** <https://discuss.elastic.co/t/update-upsert-with-query-support/135098>\
**Category:** Elasticsearch\
**Created:** [June 8, 2018, 7:26am UTC](https://discuss.elastic.co/t/update-upsert-with-query-support/135098 "2018-06-08T07:26:50Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Hitesh\_Baldaniya](https://avatars.discourse-cdn.com/v4/letter/h/439d5e/32.png) [@Hitesh\_Baldaniya](https://discuss.elastic.co/u/Hitesh_Baldaniya)\
**Post date:** [June 8, 2018, 7:26am UTC](https://discuss.elastic.co/t/update-upsert-with-query-support/135098/1 "2018-06-08T07:26:51Z")

</div>

Hi All,

Consider following situation.

`PUT {{Index}}/{{Type}}/{{ID}}?query={"range": {"version": {"lt": 2}}} { "doc": { "title": "Test1" "version": 2 } }`

I want to **upsert** document if it absent, otherwise update the document with query where if current document has version less than incoming version then only update.

This needs to be done in single call as architecture of writing document in ES is with large amount of concurrent requests. So if any request with lesser version comes later for document update we want to ignore those requests.

I am unable to find out such a call, So please can anyone help in it?

---

<div class="post-metadata">

**Author:** ![Christian\_Dahlqvist](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/christian_dahlqvist/32/4617_2.png) [@Christian\_Dahlqvist](https://discuss.elastic.co/u/Christian_Dahlqvist)\
**Post date:** [June 8, 2018, 7:33am UTC](https://discuss.elastic.co/t/update-upsert-with-query-support/135098/2 "2018-06-08T07:33:26Z")

</div>

Have a look at [scripted updates](https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update.html#_scripted_updates).

---

<div class="post-metadata">

**Author:** ![Hitesh\_Baldaniya](https://avatars.discourse-cdn.com/v4/letter/h/439d5e/32.png) [@Hitesh\_Baldaniya](https://discuss.elastic.co/u/Hitesh_Baldaniya)\
**Post date:** [June 8, 2018, 8:55am UTC](https://discuss.elastic.co/t/update-upsert-with-query-support/135098/3 "2018-06-08T08:55:16Z")

</div>

Thanks Christina,

But complete update of document is not satisfied by scripted updates. Instead scripts any possibilities of adding "body" parameter where we can specify the document to be updated?

---

<div class="post-metadata">

**Author:** ![Christian\_Dahlqvist](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/christian_dahlqvist/32/4617_2.png) [@Christian\_Dahlqvist](https://discuss.elastic.co/u/Christian_Dahlqvist)\
**Post date:** [June 8, 2018, 8:57am UTC](https://discuss.elastic.co/t/update-upsert-with-query-support/135098/4 "2018-06-08T08:57:03Z")

</div>

Will the [upsert option](https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update.html#upserts) not work?

---

<div class="post-metadata">

**Author:** ![Hitesh\_Baldaniya](https://avatars.discourse-cdn.com/v4/letter/h/439d5e/32.png) [@Hitesh\_Baldaniya](https://discuss.elastic.co/u/Hitesh_Baldaniya)\
**Post date:** [June 8, 2018, 12:00pm UTC](https://discuss.elastic.co/t/update-upsert-with-query-support/135098/5 "2018-06-08T12:00:22Z")

</div>

Hi Christina,

"Upsert" works currently because if there is no such "\_id" then it creates automatically.

What I expect is "Update API Document" call with **query** and **body** to update document, not "Update By Query" as it doesn't satisfy requirement of adding body.

Thanks,

---

<div class="post-metadata">

**Author:** ![Christian\_Dahlqvist](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/christian_dahlqvist/32/4617_2.png) [@Christian\_Dahlqvist](https://discuss.elastic.co/u/Christian_Dahlqvist)\
**Post date:** [June 8, 2018, 1:20pm UTC](https://discuss.elastic.co/t/update-upsert-with-query-support/135098/6 "2018-06-08T13:20:11Z")

</div>

As far as I know there is no API like that, but I think you should be able to pass your document as parameter (as well as in the upset field) and then perform the condition check and update through the script.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2018, 1:20pm UTC](https://discuss.elastic.co/t/update-upsert-with-query-support/135098/7 "2018-07-06T13:20:12Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
