聚合应用于搜索结果,帮助用户理解数据的分布、统计和模式。
聚合提供了从数据中分组和提取数据的能力。聚合类似于 SQL GROUPBY 和 SQL 聚合函数。
以下Demo都是基于对索引bank的搜索。
GET bank/_search { "query": { "match": { "address": "mill" } }, "aggs": { "group_by_state": { "terms": { "field": "age" } }, "avg_age": { "avg": { "field": "age" } } }, "size": 0 } query:定义了搜索的具体条件。
match:这是一个全文搜索查询,用于搜索address字段中包含"mill"的文档。aggs:定义了聚合操作,用于对搜索结果进行分组和统计分析。
group_by_state:这是一个terms聚合,命名为group_by_state(注意,则个名称是自定义的,不是标准字段),它将结果基于age字段的术语进行分组,并为每个年龄提供计数。 terms:指定使用age字段进行分组并统计文档数量。avg_age:这是一个度量聚合,命名为avg_age(也是自定义名称),用于计算所有匹配文档的age字段的平均值。 avg:指定聚合类型为平均值。size:指定返回的文档数量。在这里设置为0,表示不返回任何匹配的文档,只返回聚合结果。
查询解释:
address字段包含"mill"的文档,但不会返回这些文档本身,只返回基于这些文档的聚合分析结果。聚合解释:
group_by_state聚合将为每个不同的年龄值创建一个桶,并计算每个年龄组中有多少文档。例如,如果有多个文档的age字段是30,它们将被归为一个桶,并且这个桶的计数将是这些文档的数量。avg_age聚合将计算所有匹配文档的age字段的平均值,提供一个单一数值,表示所有这些文档年龄的平均。查询结果:
聚合结果包含在响应体中的aggregations对象中,这个对象中有我们命名的两个属性avg_age和group_by_state,属性值包含聚合结果。
这是一个桶聚合,先按照年龄分桶,统计每个年龄的人数,然后统计每个桶内的人的平均薪资。
注意下面的写法,最外层聚合是按照年龄分桶,嵌套子聚合是外层聚合的基础上统计桶内人的平均薪资。
GET bank/_search { "query": { "match_all": {} }, "aggs": { "group_by_age": { "terms": { "field": "age" }, "aggs": { "avg_balance": { "avg": { "field": "balance" } } } } }, "size": 0 } query:定义了搜索的具体条件。
match_all:这是一个查询,它匹配所有文档。这意味着搜索结果将包括bank索引中的所有文档。aggs:定义了聚合操作,用于对搜索结果进行分组和统计分析。
group_by_age:这是一个terms聚合,它将结果基于age字段的值进行分组。 terms:指定使用age字段进行分组,这将创建一个桶为每个不同的年龄值。aggs:在这个terms聚合内部,定义了一个子聚合avg_balance。 avg_balance:这是一个度量聚合,用于计算每个年龄组的账户余额(balance字段)的平均值。 avg:指定聚合类型为平均值,计算每个年龄桶中balance字段的平均数。size:指定返回的文档数量。在这里设置为0,表示不返回任何匹配的文档,只返回聚合结果。
聚合解释:
group_by_age聚合将为每个不同的年龄值创建一个桶,并计算每个年龄组中的文档数量。avg_balance子聚合将计算该年龄组内所有文档的balance字段的平均值。这个DSL的用例是分析银行索引中不同年龄段的平均账户余额。结果将展示每个年龄组的账户平均余额,这可以用于了解不同年龄段的财务状况或进行市场分析。