code: func (c *Conn) UpdateWithScript(index string, _type string, id string, args map[string]interface{}, script string, params interface{}) (BaseResponse, error) {
  	switch v := params.(type) {
  	case string:
  		paramsPart := fmt.Sprintf("{\"params\":%s}", v)
  		data := fmt.Sprintf("{\"script\":\"%s\", \"params\":%s}", script, paramsPart)
  		return c.Update(index, _type, id, args, data)
  	}
  	var data map[string]interface{} = make(map[string]interface{})
  	data["params"] = params
  	data["script"] = script
  	return c.Update(index, _type, id, args, data)
  }
docs: // UpdateWithScript updates a document based on a script provided.
  // The operation gets the document (collocated with the shard) from the index, runs the script
  // (with optional script language and parameters), and index back the result (also allows to
  // delete, or ignore the operation). It uses versioning to make sure no updates have happened
  // during the "get" and "reindex". (available from 0.19 onwards).
  //
  // Note, this operation still means full reindex of the document, it just removes some network
  // roundtrips and reduces chances of version conflicts between the get and the index. The _source
  // field need to be enabled for this feature to work.
  // http://www.elasticsearch.org/guide/reference/api/update.html