code: func (r *SearchRequest) Body() (string, error) {
  	if r.source == nil {
  		// Default: No custom source specified
  		src, err := r.searchSource.Source()
  		if err != nil {
  			return "", err
  		}
  		body, err := json.Marshal(src)
  		if err != nil {
  			return "", err
  		}
  		return string(body), nil
  	}
  	switch t := r.source.(type) {
  	default:
  		body, err := json.Marshal(r.source)
  		if err != nil {
  			return "", err
  		}
  		return string(body), nil
  	case *SearchSource:
  		src, err := t.Source()
  		if err != nil {
  			return "", err
  		}
  		body, err := json.Marshal(src)
  		if err != nil {
  			return "", err
  		}
  		return string(body), nil
  	case json.RawMessage:
  		return string(t), nil
  	case *json.RawMessage:
  		return string(*t), nil
  	case string:
  		return t, nil
  	case *string:
  		if t != nil {
  			return *t, nil
  		}
  		return "{}", nil
  	}
  }
docs: // Body allows to access the search body of the request, as generated by the DSL.
  // Notice that Body is read-only. You must not change the request body.
  //
  // Body is used e.g. by MultiSearch to get information about the search body
  // of one SearchRequest.
  // See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-multi-search.html