I am using Bonsai Elastic Search on Heroku and I have a document as follows:
{
"_index":"myIndex",
"_type":"result",
"_id":"1234_is",
"_version":1,
"found":true,
"_source":{
"query":"is",
"pubId":1234,
"counter":1
}
}
I'm trying to update the counter like this (as per http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/docs-update.html):
curl -XPOST 'http://ELASTICSEARCHINSTANCE:9200/myIndex/result/1234_is/_update' -d '{"script" : "ctx._source.counter+=1"}'
But I'm getting the following error:
{
"error":"ElasticsearchIllegalArgumentException[failed to execute script]; nested: ExpressionScriptCompilationException[Failed to parse expression: ctx._source.counter+=1]; nested: ParseException[ unexpected character '1' at position (21).]; nested: MismatchedTokenException; ",
"status":400
}
Bonsai founder here.
For safety reasons, Bonsai only supports dynamic scripting with sandboxed languages on their multi-tenant environments. Following CVE-2015-1427, and the release of Elasticsearch 1.4.3 and 1.3.8, Groovy is no longer considered a safe language for sandboxed dynamic scripts in Elasticsearch.
That said, Groovy is perfectly safe on Bonsai's single-tenant clusters, drop us a line at info@bonsai.io to get a quote for that sort of setup.