聚合
编辑聚合编辑
聚合将您的数据汇总为指标、统计数据或其他分析结果。
有关聚合的完整说明,请参阅Elasticsearch 文档。
简单聚合编辑
在下面的示例中,我们运行一个聚合,该聚合从产品索引中创建一个价格直方图,用于名称与用户提供的文本匹配的产品。 为此,我们使用了一个包含查询(在搜索文档中解释)和聚合定义的搜索请求。
此示例是一种分析类型的聚合,我们不想使用匹配的文档。 用于分析的搜索请求的一般模式是将结果 size
设置为零,并将搜索结果的目标类设置为 Void
。
如果使用相同的聚合来显示产品并将价格直方图作为下钻切面,我们将 size
设置为非零值,并使用 Product
作为目标类来处理结果。
String searchText = "bike"; Query query = MatchQuery.of(m -> m .field("name") .query(searchText) )._toQuery(); SearchResponse<Void> response = esClient.search(b -> b .index("products") .size(0) .query(query) .aggregations("price-histogram", a -> a .histogram(h -> h .field("price") .interval(50.0) ) ), Void.class );
将匹配文档的数量设置为零,因为我们只使用价格直方图。 |
|
设置用于过滤要对其运行聚合的产品的查询 |
|
创建一个名为“price-histogram”的聚合。 您可以根据需要添加任意数量的命名聚合。 |
|
选择 |
|
我们不关心匹配项( |
响应包含请求中每个聚合的聚合结果。
List<HistogramBucket> buckets = response.aggregations() .get("price-histogram") .histogram() .buckets().array(); for (HistogramBucket bucket: buckets) { logger.info("There are " + bucket.docCount() + " bikes under " + bucket.key()); }
以上示例的源代码可以在Java API 客户端测试中找到。