1. 术语聚合(Terms Aggregation)
- Go代码示例:
go 复制
req := esapi.SearchRequest{
Index: []string{"your_index"},
Aggregations: map[string]interface{}{
"category_count": map[string]interface{}{
"terms": map[string]interface{}{
"field": "category.keyword",
},
},
},
}
- 产生的JSON类似(简化形式):
json 复制
{
"aggs": {
"category_count": {
"terms": {
"field": "category.keyword"
}
}
}
}
- 在这个JSON中, aggs (也可以是 aggregations )是聚合操作的关键字, category_count 是自定义的聚合名称,用于在结果中标识这个聚合。 terms 表示术语聚合类型, field 指定了要进行术语聚合的字段为 category.keyword 。
2. 范围聚合(Range Aggregation)
- Go代码示例:
go 复制
req := esapi.SearchRequest{
Index: []string{"your_index"},
Aggregations: map[string]interface{}{
"price_ranges": map[string]interface{}{
"range": map[string]interface{}{
"field": "price",
"ranges": [
{
"from": 0,
"to": 100
},
{
"from": 100,
"to": 200
}
]
}
}
},
}
- 产生的JSON类似(简化形式):
json 复制
{
"aggs": {
"price_ranges": {
"range": {
"field": "price",
"ranges": [
{
"from": 0,
"to": 100
},
{
"from": 100,
"to": 200
}
]
}
}
}
}
- 这里 price_ranges 是聚合名称, range 表示范围聚合类型, field 指定了要进行范围聚合的字段 price , ranges 定义了具体的范围区间。
3. 平均值聚合(Avg Aggregation)结合其他聚合
- Go代码示例:
go 复制
req := esapi.SearchRequest{
Index: []string{"your_index"},
Aggregations: map[string]interface{}{
"category_stats": map[string]interface{}{
"terms": map[string]interface{}{
"field": "category.keyword"
},
"aggs": {
"average_price": {
"avg": {
"field": "price"
}
}
}
}
},
}
- 产生的JSON类似(简化形式):
json 复制
{
"aggs": {
"category_stats": {
"terms": {
"field": "category.keyword"
},
"aggs": {
"average_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
- 在这个例子中,首先进行 category.keyword 字段的术语聚合,然后在每个术语聚合的分组内进行 price 字段的平均值聚合。 category_stats 是外层术语聚合的名称, average_price 是内层平均值聚合的名称。
go elasticsearch v7之esapi SearchRequest之聚合产生的json是什么样的
于 2024-10-03 15:15:09 首次发布