code: func (c *Conn) UpdateWithPartialDoc(index string, _type string, id string, args map[string]interface{}, doc interface{}, upsert bool) (BaseResponse, error) {
  	switch v := doc.(type) {
  	case string:
  		upsertStr := ""
  		if upsert {
  			upsertStr = ", \"doc_as_upsert\":true"
  		}
  		content := fmt.Sprintf("{\"doc\":%s %s}", v, upsertStr)
  		return c.Update(index, _type, id, args, content)
  	}
  	var data map[string]interface{} = make(map[string]interface{})
  	data["doc"] = doc
  	if upsert {
  		data["doc_as_upsert"] = true
  	}
  	return c.Update(index, _type, id, args, data)
  }
docs: // UpdateWithPartialDoc updates a document based on partial document provided. The update API also
  // support passing a partial document (since 0.20), which will be merged into the existing
  // document (simple recursive merge, inner merging of objects, replacing core "keys/values" and arrays).
  // If both doc and script is specified, then doc is ignored. Best is to put your field pairs of the partial
  // document in the script itself.
  //
  // http://www.elasticsearch.org/guide/reference/api/update.html