ES聚合分析总结

ES聚合分析总结,第1张

ES聚合分析总结

文档的聚合分析
像在SQL中会需要SUM(),MAX().AVG()函数。ElasticSearch也提供了关于聚合分析的函数。

ElasticSearch中常见的聚合分析函数有terms(分组函数)、avg(平均数)、range(区间分组)、max(求最大值)、min(求最小值)、cardinality(获取唯一值的数量)、value_count(获取值的数量,不去重,可以得出多少个值参与了聚合)。

语法与举例
语法:

GET /index/type/_search
{
  "aggs": {
    "自定义聚合名称": {
      "聚合函数": {
        聚合参数
      }
    }
  }
}

举例:

// 按性别分组
GET /douban/book/_search
{
  "aggs": {
    "groud_by_express": {
      "terms": {
        "field": "book_id",
        "size": 10
      }
    }
  }
}
//求年龄的平均数
GET /people/test/_search
{
  "aggs": {
    "avg_of_age": {
      "avg": {
        "field": "age"
      }
    }
  }
}
// 求年龄的最大值:
GET /people/test/_search
{
  "aggs": {
    "max_of_age": {
      "max": {
        "field": "age"
      }
    }
  }
}
// 把年龄[15,17]的分成一组,把年龄[18,25]的分成一组
GET /people/test/_search
{
  "aggs": {
    "range_by_age": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 15,
            "to": 17
          },
          {
            "from": 18,
            "to": 25
          }
        ]
      }
    }
  }
}
// 获取不同的年龄数:,比如有年龄[1,2,3,3,4,5],得到的结果是5,因为3只算一次
GET /people/test/_search
{
  "aggs": {
    "get_diff_age_count": {
      "cardinality": {
        "field": "age"
      }
    }
  }
}

返回结果解析:

其他语法:
先查询后聚合:

GET /people/test/_search
{
  "query": {
    "match": {
      "name": "lilei1"
    }
  }, 
  "aggs": {
    "avg_of_age": {
      "avg": {
        "field": "age"
      }
    }
  }
}

先过滤后聚合:

// 先获取年龄大于15的,再求平均值
GET /people/test/_search
{
  "query": {
    "range": {
      "age": {
        "gt":15
      }
    }
  }, 
  "aggs": {
    "avg_of_age": {
      "avg": {
        "field": "age"
      }
    }
  }
}

聚合函数嵌套

// 先按性别分组,再获取年龄平均值
GET /people/test/_search
{
	"aggs": {
		"groud_by_express": {
			"terms": {
				"field": "gender"
			},
			"aggs": {
				"avg_of_age": {
					"avg": {
						"field": "age"
					}
				}
			}
		}
	}
}

聚合+排序

// 先按性别分组,再按分组的年龄平均值降序排序,order中的avg_of_age就是下面的聚合函数的自定义名称
GET /people/test/_search
{
	"aggs": {
		"groud_by_express": {
			"terms": {
				"field": "gender",
				"order": {
				  "avg_of_age": "desc"
				}
			},
			"aggs": {
				"avg_of_age": {
					"avg": {
						"field": "age"
					}
				}
			}
		}
	}
}

小结:
本节主要讲了ElasticSearch中关于数据聚合的使用方法,aggs是与query同级的,使用聚合函数需要自己定义一个外层的聚合函数名称,avg用于求平均值,max用于求最大值,range用于范围分组,term用于数据分组。分组可以与条件搜索和过滤一起使用,aggs是与query同级的,聚合函数也可以嵌套使用。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5677382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存