code: func (q *GeoBoundingBoxQuery) Source() (interface{}, error) {
  	// {
  	//   "geo_bounding_box" : {
  	//     ...
  	//   }
  	// }
  
  	if q.top == nil {
  		return nil, errors.New("geo_bounding_box requires top latitude to be set")
  	}
  	if q.bottom == nil {
  		return nil, errors.New("geo_bounding_box requires bottom latitude to be set")
  	}
  	if q.right == nil {
  		return nil, errors.New("geo_bounding_box requires right longitude to be set")
  	}
  	if q.left == nil {
  		return nil, errors.New("geo_bounding_box requires left longitude to be set")
  	}
  
  	source := make(map[string]interface{})
  	params := make(map[string]interface{})
  	source["geo_bounding_box"] = params
  
  	box := make(map[string]interface{})
  	box["top_left"] = []float64{*q.left, *q.top}
  	box["bottom_right"] = []float64{*q.right, *q.bottom}
  	params[q.name] = box
  
  	if q.typ != "" {
  		params["type"] = q.typ
  	}
  	if q.queryName != "" {
  		params["_name"] = q.queryName
  	}
  
  	return source, nil
  }
docs: // Source returns JSON for the function score query.