code: func (q *TermsSetQuery) Source() (interface{}, error) {
  	// {"terms_set":{"codes":{"terms":["abc","def"],"minimum_should_match_field":"required_matches"}}}
  	source := make(map[string]interface{})
  	inner := make(map[string]interface{})
  	params := make(map[string]interface{})
  	inner[q.name] = params
  	source["terms_set"] = inner
  
  	// terms
  	params["terms"] = q.values
  
  	// minimum_should_match_field
  	if match := q.minimumShouldMatchField; match != "" {
  		params["minimum_should_match_field"] = match
  	}
  
  	// minimum_should_match_script
  	if match := q.minimumShouldMatchScript; match != nil {
  		src, err := match.Source()
  		if err != nil {
  			return nil, err
  		}
  		params["minimum_should_match_script"] = src
  	}
  
  	// Common parameters for all queries
  	if q.boost != nil {
  		params["boost"] = *q.boost
  	}
  	if q.queryName != "" {
  		params["_name"] = q.queryName
  	}
  
  	return source, nil
  }
docs: // Source creates the query source for the term query.