feat:Support for term aggs order

This commit is contained in:
Hardy 2021-03-12 19:37:19 +08:00
parent e3c77e0849
commit cc685d325e
2 changed files with 44 additions and 6 deletions

View File

@ -61,8 +61,8 @@ func TestAggregations(t *testing.T) {
{ {
"a complex, multi-aggregation, nested", "a complex, multi-aggregation, nested",
Aggregate( Aggregate(
NestedAgg("categories","categories"). NestedAgg("categories", "categories").
Aggs(TermsAgg("type","outdoors")), Aggs(TermsAgg("type", "outdoors")),
FilterAgg("filtered", FilterAgg("filtered",
Term("type", "t-shirt")), Term("type", "t-shirt")),
), ),
@ -72,9 +72,9 @@ func TestAggregations(t *testing.T) {
"nested": map[string]interface{}{ "nested": map[string]interface{}{
"path": "categories", "path": "categories",
}, },
"aggs": map[string]interface{} { "aggs": map[string]interface{}{
"type": map[string]interface{} { "type": map[string]interface{}{
"terms": map[string]interface{} { "terms": map[string]interface{}{
"field": "outdoors", "field": "outdoors",
}, },
}, },
@ -83,7 +83,7 @@ func TestAggregations(t *testing.T) {
"filtered": map[string]interface{}{ "filtered": map[string]interface{}{
"filter": map[string]interface{}{ "filter": map[string]interface{}{
"term": map[string]interface{}{ "term": map[string]interface{}{
"type": map[string]interface{} { "type": map[string]interface{}{
"value": "t-shirt", "value": "t-shirt",
}, },
}, },
@ -92,5 +92,33 @@ func TestAggregations(t *testing.T) {
}, },
}, },
}, },
{
"order for termsAggs",
//eq.Aggregate(eq.TermsAgg("a1", "FIELD1").Size(0).Aggs(eq.Sum("a2", "FIELD2.SUBFIELD")))
Aggregate(
TermsAgg("categories", "categories").
Order(map[string]string{"priceSum": "desc"}).
Size(5).Aggs(Sum("priceSum", "price"))),
map[string]interface{}{
"aggs": map[string]interface{}{
"categories": map[string]interface{}{
"terms": map[string]interface{}{
"field": "categories",
"order": map[string]interface{}{
"priceSum": "desc",
},
"size": 5,
},
"aggs": map[string]interface{}{
"priceSum": map[string]interface{}{
"sum": map[string]interface{}{
"field": "price",
},
},
},
},
},
},
},
}) })
} }

View File

@ -12,6 +12,7 @@ type TermsAggregation struct {
shardSize *float64 shardSize *float64
showTermDoc *bool showTermDoc *bool
aggs []Aggregation aggs []Aggregation
order map[string]string
} }
// TermsAgg creates a new aggregation of type "terms". The method name includes // TermsAgg creates a new aggregation of type "terms". The method name includes
@ -54,6 +55,12 @@ func (agg *TermsAggregation) Aggs(aggs ...Aggregation) *TermsAggregation {
return agg return agg
} }
// Order sets the sort for terms agg
func (agg *TermsAggregation) Order(order map[string]string) *TermsAggregation {
agg.order = order
return agg
}
// Map returns a map representation of the aggregation, thus implementing the // Map returns a map representation of the aggregation, thus implementing the
// Mappable interface. // Mappable interface.
func (agg *TermsAggregation) Map() map[string]interface{} { func (agg *TermsAggregation) Map() map[string]interface{} {
@ -70,6 +77,9 @@ func (agg *TermsAggregation) Map() map[string]interface{} {
if agg.showTermDoc != nil { if agg.showTermDoc != nil {
innerMap["show_term_doc_count_error"] = *agg.showTermDoc innerMap["show_term_doc_count_error"] = *agg.showTermDoc
} }
if agg.order != nil {
innerMap["order"] = agg.order
}
outerMap := map[string]interface{}{ outerMap := map[string]interface{}{
"terms": innerMap, "terms": innerMap,