聚合
编辑聚合
编辑聚合将您的数据汇总为指标、统计数据或其他分析结果。
有关聚合的完整说明,请参阅 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 客户端测试中找到。