家纺营销型网站,黄山网站建设jidela,泗泾做网站公司,做猎头可以在哪些网站注册1、数据聚合
聚合#xff08;aggregations#xff09;可以让我们极其方便的实现数据的统计、分析和运算。实现这些统计功能的比数据库的 SQL 要方便的多#xff0c;而且查询速度非常快#xff0c;可以实现近实时搜索效果。
注意#xff1a; 参加聚合的字段必须是 keywor…1、数据聚合
聚合aggregations可以让我们极其方便的实现数据的统计、分析和运算。实现这些统计功能的比数据库的 SQL 要方便的多而且查询速度非常快可以实现近实时搜索效果。
注意 参加聚合的字段必须是 keyword、日期、数值和布尔类型
1.1 聚合的种类
常见的聚合类型
1.1.1 桶聚合Bucket对文档分组类似 MySQL的 group by 功能
类型描述TermAggregation按照文档字段值分组如品牌分组Date Histogram按照日期阶梯分组如按月分组
1.1.2 度量聚合Metric值计算如最大值、最小值、平均值等等
类型描述Avg求平均值Max求最大值Min求最小值Stats同时求max、min、avg、sum等
1.1.3 管道聚合pipeline: 对已聚合的结果为基础做聚合
1.2 聚合示例测试1
需求从所有酒店数据中查询酒店金额不大于300的所有酒店品牌的种类并按照品牌的数量进行逆序排序筛选出前5个数量最多的品牌。 分析① 限制酒店金额 ② 根据酒店的品牌做聚合Bucket查询 ③ 逆序排序
1.2.1 定义 DSL 语法
GET /hotel/_search
{query: {range: {price: {lte: 300}}},size: 0,aggs: {brandAggs: {terms: {field: brand,size: 5,order: {_count: desc}}}}
}1.2.2 参数说明
size: 设置为0结果中不需要包含文档只返回聚合结果aggs定义聚合固定值 brandAgg聚合名称自定义语义化即可 terms: 聚合类型brand 是一个 keyword 类型的字符串所以用 termsfield参与聚合的字段size希望获取的聚合结果数量order指定排序按照 _count 逆序排序
1.2.3 测试结果 1.3 聚合示例测试2
需求: 对酒店的品牌分组并计算每个品牌的用户评分的最大值、最小值和平均值等并按照酒店评分的平均值逆序排序 分析① 对品牌进行桶Bucket聚合 ② 对桶聚合的结果进行Metric聚合运算
1.3.1 定义 DSL 语法
GET /hotel/_search
{size: 0,aggs: {brandAgg: {terms: {field: brand,size: 10,order: {scoreAgg.avg: desc}},aggs: {scoreAgg: {stats: {field: score}}}}}
}1.3.2 参数说明
size: 设置为0结果中不需要包含文档只返回聚合结果aggs定义聚合固定值 brandAgg聚合名称自定义语义化即可 terms: 聚合类型brand 是一个 keyword 类型的字符串所以用 terms field参与聚合的字段size希望获取的聚合结果数量order指定排序这里按照 “scoreAgg.avg” 逆序排序 aggs对 brandAggs 的子聚合也就是说多聚合后的结果分别计算固定值 scoreAgg聚合名称自定义语义化即可 statsMetric 聚合计算这里的 stats 可以计算 min、max、avg、sum的值field聚合字段
1.3.3 测试结果 1.4 聚合示例测试3
需求对酒店的品牌分组累加品牌评分按累计评分逆序排序筛选出前5名计算每个品牌评分占总评分的比率 分析① 对品牌进行桶Bucket聚合 ② 对桶聚合的结果进行Metric聚合运算 ③ 聚合计算Pipeline④ 逻辑运算
1.4.1 定义 DSL 语法
GET /hotel/_search
{size: 0,aggs: {brandAgg: {terms: {field: brand,size: 5,order: {singleBrandTotalScore: desc}},aggs: {singleBrandTotalScore: {sum: {field: score}}}},allBrandTotalScore: {sum_bucket: {buckets_path: brandAggsingleBrandTotalScore}}}
}1.4.2 参数说明
size: 设置为0结果中不需要包含文档只返回聚合结果aggs定义聚合固定值 brandAgg聚合名称自定义语义化即可 terms: 聚合类型brand 是一个 keyword 类型的字符串所以用 terms field参与聚合的字段size希望获取的聚合结果数量order指定排序这里按照 “singleBrandTotalScore.value” 逆序排序sum 聚合运算 value 可省略 aggs对 brandAggs 的子聚合也就是说多聚合后的结果分别计算固定值 singleBrandTotalScore: 多单一品牌的所有评分进行累加 sum: 对 score 字段求和 allBrandTotalScore聚合名称自定义语义化即可每个品牌的得分总和再次求和以获得所有品牌的总得分 sum_bucket 管道聚合 buckets_path指定了数据来源路径即来自brandAgg聚合中 singleBrandTotalScore 的结果
1.4.3 测试结果 1.4.4 说明是否可以直接将 allBrandTotalScore 计算值传入 aggs 中直接参与计算还有待探索若有好的方法希望留言反馈感谢