使用更新脚本时出现ElasticsearchIllegalArgumentException

时间:2015-03-03 10:31:58

标签: elasticsearch bonsai-elasticsearch

我在Heroku上使用Bonsai弹性搜索,我有一份文件如下:

{
   "_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 个答案:

答案 0 :(得分:1)

在ES 1.4.4上,这就是我开始工作的方式:

  1. 将以下行添加到elasticsearch.yml文件中:script.groovy.sandbox.enabled: true
  2. 重新启动ES
  3. 然后我运行了以下设置,效果很好。

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

答案 1 :(得分:1)

盆景创始人在这里。

出于安全原因,Bonsai仅在其多租户环境中支持使用沙盒语言的动态脚本。在CVE-2015-1427和Elasticsearch 1.4.3 and 1.3.8的发布之后,Groovy不再被认为是Elasticsearch中沙盒动态脚本的安全语言。

也就是说,Groovy对Bonsai的单租户群非常安全,请给我们发送电子邮件至info@bonsai.io获取该类设置的报价。