code: func (q *DisMaxQuery) Source() (interface{}, error) {
  	// {
  	//  "dis_max" : {
  	//    "tie_breaker" : 0.7,
  	//    "boost" : 1.2,
  	//    "queries" : {
  	//      {
  	//        "term" : { "age" : 34 }
  	//      },
  	//      {
  	//        "term" : { "age" : 35 }
  	//      }
  	//    ]
  	//  }
  	// }
  
  	query := make(map[string]interface{})
  	params := make(map[string]interface{})
  	query["dis_max"] = params
  
  	if q.tieBreaker != nil {
  		params["tie_breaker"] = *q.tieBreaker
  	}
  	if q.boost != nil {
  		params["boost"] = *q.boost
  	}
  	if q.queryName != "" {
  		params["_name"] = q.queryName
  	}
  
  	// queries
  	var clauses []interface{}
  	for _, subQuery := range q.queries {
  		src, err := subQuery.Source()
  		if err != nil {
  			return nil, err
  		}
  		clauses = append(clauses, src)
  	}
  	params["queries"] = clauses
  
  	return query, nil
  }
docs: // Source returns the JSON serializable content for this query.