天天看點

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,如需轉載請自行聯系原作者

繼續閱讀