Skip to content


Subversion checkout URL

You can clone with
Download ZIP


Update API: Allow to upsert, provide a doc and index it if the doc does not exists #2008

kimchy opened this Issue · 9 comments

6 participants


Here is a sample:

curl -XPUT localhost:9200/test

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
    "script" : "ctx._source.counter += count",
    "params" : {
        "count" : 4
    "upsert" : {
        "counter" : 0

curl -XGET localhost:9200/test/type1/1
@kimchy kimchy closed this in 9905eab

Wonderfull, great work! :-)


Would it be possible to use this new "doc" as the document containing the updated fields without needing to use a script?

Taking a quick look though the code it seems like it might be possible if we check that no "script" is set then pull the updated source back out of the new IndexRequest. I imagine as we need to get it as a map but it looks like we can only get bytes currently. Once we have the sources we can merge and index.


The problem here is how to "merge" that new doc values into the updated doc? Simple fields can be overridden or appended, but what happens with array values and the like? we can decide that its a simple override and thats it.


I think a simple override would be nice, more complex operations would be done using scripts.


Yea I think a simple override would be fine (just like the partial update plugin). If someone needs something more advanced they can use a script like Paikan said.


It would be nice to have conditional insert so that insert happens only if the record does not exist.


Is Index with op_type=create the functionality you are looking for?


Yep it is. Thanks


Are there any other values that op_type can take besides create?

@Hendler Hendler referenced this issue in pyelasticsearch/pyelasticsearch

Upsert supported? #93

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.