こんにちわ。
以前Watcherの質問でありました内容に少し付け足せば可能かと思います。
transformでこのようにしております。
ctx.payload.hits.hits[i]['打率'] =
の部分がフィールドを追加しているところになります。
(蛇足ですが、ゼロ除算、ぬるぽなどは別途考慮ください)
"actions": {
"index_payload": {
"transform": {
"script": """
for (int i = 0; i < ctx.payload.hits.hits.length; ++i) {
ctx.payload.hits.hits[i] = ctx.payload.hits.hits[i]._source;
ctx.payload.hits.hits[i]['打率'] = (double)ctx.payload.hits.hits[i]['安打'] / (double)ctx.payload.hits.hits[i]['打数'];
}
return [ '_doc' : ctx.payload.hits.hits];
"""
},
"index": {
"index": "watcher-index"
}
}
}
実際に登録されるindexはこのようになりました。
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "watcher-index",
"_type" : "_doc",
"_id" : "XXFIo2sBsZpVTu8PuMgc",
"_score" : 1.0,
"_source" : {
"安打" : 2,
"打数" : 4,
"打率" : 0.5
}
},
{
"_index" : "watcher-index",
"_type" : "_doc",
"_id" : "XnFIo2sBsZpVTu8PuMgc",
"_score" : 1.0,
"_source" : {
"安打" : 1,
"打数" : 5,
"打率" : 0.2
}
}
]
}
}
打率が計算されて追加されていることが確認できました。
ご参考になれば幸いです。
動作確認環境: Elasticseardch 7.2.0