code: func (q *GeoPolygonQuery) Source() (interface{}, error) {
  	// "geo_polygon" : {
  	//  	"person.location" : {
  	//         "points" : [
  	//             {"lat" : 40, "lon" : -70},
  	//             {"lat" : 30, "lon" : -80},
  	//             {"lat" : 20, "lon" : -90}
  	//         ]
  	//     }
  	// }
  	source := make(map[string]interface{})
  
  	params := make(map[string]interface{})
  	source["geo_polygon"] = params
  
  	polygon := make(map[string]interface{})
  	params[q.name] = polygon
  
  	var points []interface{}
  	for _, point := range q.points {
  		points = append(points, point.Source())
  	}
  	polygon["points"] = points
  
  	if q.queryName != "" {
  		params["_name"] = q.queryName
  	}
  
  	return source, nil
  }
docs: // Source returns JSON for the function score query.