Composite 聚合——Elasticsearch 聚合后分页新实现

r660926
发布于 2022-4-21 13:10
浏览
0收藏

Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区

显然,multi-terms 聚合只支持:多个 terms 聚合操作,是不能满足需求的。

 

而,Composite 组合聚合应运而生,巧妙的解决了如上组合聚合问题。

Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区

Composite 是个六级词汇,含义:并合的,复合的,混成的,合成的,集成的。

 

Composite 聚合是一种多桶聚合,可从不同来源创建复合桶。

 

具体哪些不同源呢?主要支持的聚合方式如下:

 

 • Terms 特定关键字聚合


 • Histogram 区间聚合


 • Date histogram 日期区间聚合


 • GeoTile grid Geo地理位置聚合


与其他多桶聚合不同,使用 Composite 聚合有效地对多级聚合( multi-level )中的所有桶进行分页。Composite 聚合提供了一种流式传输特定聚合的所有桶的方法,类似于Scroll 检索(滚动检索,适用于全量查询数据的业务场景)的实现。

 

关于Scroll 检索推荐阅读:

 

干货 | 全方位深度解读 Elasticsearch 分页查询


Composite 聚合是根据为每个文档提取/创建的值的组合构建的,每个组合都被视为一个复合桶(2.1.3 会详细举例什么是复合桶)。

 

2.1.2 Composite 聚合的核心功能


Composite 聚合较其他聚合的核心不同点如下:

 

 • 支持多类型组合桶聚合。打破传统多桶单类型聚合的壁垒,支持:Terms、Histogram、Data histogram、GeoTile grid Geo 聚合。

 

 • 支持聚合后分页。类似:scroll 检索的,仅支持向后翻页,不支持随机翻页。


2.1.3 Composite 聚合语法


Composite 语法参考如下:

Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区

 • sources:指定组合分桶里各个分桶检索语句,可以是一个或者多个(中括弧里面包含多个大括弧子分桶聚合语句)。

 

 • size:每次返回的结果数。

 

 • after:翻页使用,每一次检索都会有一个:“after_key”键值对组合,供下次检索使用。

 

 • 复合桶:{ "brand_terms": "lining",  "prices_histogram": 500 } 实则为:品牌和价格区间两者组成的复合桶。

 

 • order:分桶内的排序方式。

Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区

有了上面的分析,再来看Composite 聚合会非常轻松。

 

拿 2.0 小节的建模数据为示例。

 

假定需要实现:基于时间区间间隔一个月为单位,且基于品牌名称两个组合桶聚合,然后各个组合桶内实现聚合统计各个组合桶的平均价格。

 

拆解如下:

 

第一:组合桶。

 

 • 分桶一:data_histogram 实现按照发布时间间隔周期(指定为1个月)的聚合。


 • 分桶二:terms 品牌聚合。


第二:基于组合桶实现各个组合桶平均价格的统计。

 

通过组合指标聚合 avg aggregation 实现组合桶内求平均值的子聚合效果。

Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区

Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区在生产环境只需要将上述内容拼成java 或者 python 代码,实现向后翻页。

Composite 聚合——Elasticsearch 聚合后分页新实现-鸿蒙开发者社区

分类
收藏
回复
举报
回复
    相关推荐