code: func (a *AdjacencyMatrixAggregation) Source() (interface{}, error) {
  	// Example:
  	//	{
  	//  "aggs" : {
  	//		"interactions" : {
  	//			"adjacency_matrix" : {
  	//				"filters" : {
  	//					"grpA" : { "terms" : { "accounts" : ["hillary", "sidney"] }},
  	//					"grpB" : { "terms" : { "accounts" : ["donald", "mitt"] }},
  	//					"grpC" : { "terms" : { "accounts" : ["vladimir", "nigel"] }}
  	//				}
  	//			}
  	//		}
  	//	}
  	// This method returns only the (outer) { "adjacency_matrix" : {} } part.
  
  	source := make(map[string]interface{})
  	adjacencyMatrix := make(map[string]interface{})
  	source["adjacency_matrix"] = adjacencyMatrix
  
  	dict := make(map[string]interface{})
  	for key, filter := range a.filters {
  		src, err := filter.Source()
  		if err != nil {
  			return nil, err
  		}
  		dict[key] = src
  	}
  	adjacencyMatrix["filters"] = dict
  
  	// AggregationBuilder (SubAggregations)
  	if len(a.subAggregations) > 0 {
  		aggsMap := make(map[string]interface{})
  		source["aggregations"] = aggsMap
  		for name, aggregate := range a.subAggregations {
  			src, err := aggregate.Source()
  			if err != nil {
  				return nil, err
  			}
  			aggsMap[name] = src
  		}
  	}
  
  	// Add Meta data if available
  	if len(a.meta) > 0 {
  		source["meta"] = a.meta
  	}
  
  	return source, nil
  }
docs: // Source returns the a JSON-serializable interface.