天天看点

ES使用脚本进行局部更新的排错记录

初学Elasticsearch,在按照《Elasticsearch服务器开发(第2版)》进行学习的过程中,在P17页中<code>1.4.5 更新文档</code>小节,使用脚本对文档进行局部更新的时候遇到了如下报错:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<code>  </code><code>~ curl -XPOST http:</code><code>//127</code><code>.0.0.1:9200</code><code>/blog/article/1/_update</code> <code>-d </code><code>'{"script": "ctx._source.content=\"new content\""}'</code>

<code>{</code>

<code>    </code><code>"error"</code><code>:{</code>

<code>        </code><code>"root_cause"</code><code>:[{</code>

<code>            </code><code>"type"</code><code>:</code><code>"remote_transport_exception"</code><code>,</code>

<code>            </code><code>"reason"</code><code>:</code><code>"[Lady Mandarin][127.0.0.1:9300][indices:data/write/update[s]]"</code>

<code>            </code><code>}</code>

<code>        </code><code>],</code>

<code>        </code><code>"type"</code><code>:</code><code>"illegal_argument_exception"</code><code>,</code>

<code>        </code><code>"reason"</code><code>:</code><code>"failed to execute script"</code><code>,</code>

<code>        </code><code>"caused_by"</code><code>:{</code>

<code>            </code><code>"type"</code><code>:</code><code>"script_exception"</code><code>,</code>

<code>            </code><code>"reason"</code><code>:</code><code>"scripts of type [inline], operation [update] and lang [groovy] are disabled"</code><code>}},</code>

<code>            </code><code>"status"</code><code>:400</code>

<code>}%</code>

通过粗略查看文档,我发现要解决这个问题,需要在Elasticsearch的配置文件<code>elasticsearch.yml</code>中添加如下配置:

script.engine.groovy.inline.update: on

由于Elasticsearch默认使用的是Groovy语言。Groovy语言一个快速且功能丰富的脚本语言,语法类似于Javascript。它在一个沙盒(sandbox)中运行,以防止恶意用户毁坏Elasticsearch或攻击服务器。

由于默认Elasticsearch没有打开Groovy的update权限,因此我们无法通过Groovy进行更新操作,通过上述配置打开权限之后,就可以进行更新操作了。

<code> </code><code>~ curl -XPOST http:</code><code>//127</code><code>.0.0.1:9200</code><code>/blog/article/1/_update</code> <code>-d </code><code>'{"script": "ctx._source.content=\"new content\""}'</code>

<code>    </code><code>"_index"</code><code>:</code><code>"blog"</code><code>,</code>

<code>    </code><code>"_type"</code><code>:</code><code>"article"</code><code>,</code>

<code>    </code><code>"_id"</code><code>:</code><code>"1"</code><code>,</code>

<code>    </code><code>"_version"</code><code>:2,</code>

<code>    </code><code>"_shards"</code><code>:{</code>

<code>        </code><code>"total"</code><code>:2,</code>

<code>        </code><code>"successful"</code><code>:1,</code>

<code>        </code><code>"failed"</code><code>:0</code>

<code>    </code><code>}</code>

本文转自 aaao 51CTO博客,原文链接:http://blog.51cto.com/nolinux/1775232,如需转载请自行联系原作者

继续阅读