Reputation: 21451
Look here for a similar example:
https://stackoverflow.com/a/33247409/1575066
from elasticsearch import Elasticsearch
es = Elasticsearch("localhost:9200")
es.update(index='test',doc_type='test1',id='1',body={'doc' {'username':'Tom'},'doc_as_upsert':True})
But now imagine the goal is to append to an array or to increment a previous value (without having to get the document first).
If you go with official requests, this is in the documentation:
POST /website/pageviews/1/_update
{
"script" : "ctx._source.views+=1",
"upsert": {
"views": 1
}
}
I was wondering how to accomplish appending to an array (just simply adding to a default list). It appeared elasticsearch's own examples are easier than anything I can find specifically for Python.
I read a post before about people just using python requests for doing elasticsearch stuff, and I'm thinking there might be a point to it...
Upvotes: 4
Views: 3091
Reputation: 12672
You can put your script
inside the body
parameter.
from elasticsearch import Elasticsearch
es = Elasticsearch()
es.update(
index="test",
doc_type="test1",
id="1",
body={"script": "ctx._source.tags+=new_tag",
"params": {
"new_tag" : "search"
}
}
)
More on update api
Here tags is an array and I am appending search to it. Also you need to enable scripting for this or you can put script in a file and put that file inside config/scripts
folder. Syntax might be different depending on ES version. Let me know if it does not work.
Upvotes: 3