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