ElasticsearchIllegalArgumentException при использовании скрипта обновления

Я использую Bonsai Elastic Search на Heroku, и у меня есть следующий документ:

{
   "_index":"myIndex",
   "_type":"result",
   "_id":"1234_is",
   "_version":1,
   "found":true,
   "_source":{
      "query":"is",
      "pubId":1234,
      "counter":1
   }
}

Я пытаюсь обновить счетчик следующим образом (согласно 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"}'

Но я получаю следующую ошибку:

{
   "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
}

2 ответа

Решение

Основатель бонсай здесь.

Из соображений безопасности Bonsai поддерживает только динамические сценарии с изолированными языками в мультитенантных средах. После CVE-2015-1427 и выпуска Elasticsearch 1.4.3 и 1.3.8 Groovy больше не считается безопасным языком для изолированных динамических сценариев в Elasticsearch.

Тем не менее, Groovy совершенно безопасен для кластеров с одним арендатором Bonsai, напишите нам по адресу info@bonsai.io, чтобы получить расценки для такого рода установки.

На ES 1.4.4 вот так у меня получилось:

  1. Добавьте следующую строку в файл asticsearch.yml: script.groovy.sandbox.enabled: true
  2. Перезагрузите ES

Затем я запустил следующую настройку, которая прекрасно работала.

PUT hilden1

PUT hilden1/type1/_mapping
{
  "properties": {
    "title": {
      "type": "string"
    },
    "counter": {
      "type": "integer"
    }
  }
}

POST hilden1/type1/1
{
  "title": "t1",
  "counter": 1
}

POST hilden1/type1/2
{
  "title": "t2",
  "counter": 2
}

GET hilden1/type1/_search
{

}

POST hilden1/type1/1/_update
{
  "script": "ctx._source.counter+=1",
  "lang": "groovy"
}
Другие вопросы по тегам