公式ドキュメントのこれだった。
なんだけどうまくいかず、結局はクエリと設定の両方の問題でした。
探した限りでは実行時の設定APIは用意されていなくて、設定ファイルで変更しないといけないっぽい。
# script.inline: on がscriptアップデートに必要
$ echo "script.inline: on" >> elasticsearch.yml
# 公式dockerのES
$ cat elasticsearch.yml
network.host: 0.0.0.0
script.inline: on
POST /<index>/_update_by_query?conflicts=proceed
に対して以下のようなクエリを投げる
{
"script": {
"inline": "ctx._source.my_point= 100"
},
"query": {
"term": {
"my_point":
}
}
}
これは↓のようなSQLのイメージ
UPDATE my_hoge_index
SET my_point=100
WHERE my_point=0;
$ curl -s http://localhost:9200/my_hoge_index/_update_by_query?conflicts=proceed -XPOST -d '
{
"script": { "inline": "ctx._source.my_point= 100"},
"query": { "term": { "my_point": 0 } }
}
' | jq .
レスポンスは↓みたいな感じで返ってきます
{
"took": 1920,
"timed_out": false,
"total": 500,
"updated": 500,
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": 0,
"throttled_millis": 0,
"requests_per_second": "unlimited",
"throttled_until_millis": 0,
"failures": []
}