feat:Support for term aggs order
This commit is contained in:
parent
e3c77e0849
commit
cc685d325e
|
@ -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",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue