ウォッチャーにおいて計算結果をフィールドとして追加する方法

こんにちわ。

以前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