ElasticSearch 的 聚合(Aggregations)-javaAPI示例
时间: 2024-01-21 08:04:33 浏览: 80
好的,以下是一个简单的ElasticSearch聚合的Java API示例:
```java
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount;
import static org.elasticsearch.index.query.QueryBuilders.rangeQuery;
public class ElasticSearchAggregationExample {
public static void main(String[] args) {
// 创建ElasticSearch客户端
Client client = // ...;
// 构建查询条件
QueryBuilder query = QueryBuilders.boolQuery()
.must(rangeQuery("timestamp").gte("2022-01-01T00:00:00").lte("2022-01-31T23:59:59"));
// 构建聚合条件
AggregationBuilder aggregation = AggregationBuilders
.dateHistogram("sales_over_time")
.field("timestamp")
.dateHistogramInterval(DateHistogramInterval.DAY)
.subAggregation(
AggregationBuilders
.terms("product_types")
.field("product_type")
.subAggregation(
AggregationBuilders.sum("total_sales").field("sales"),
AggregationBuilders.count("transaction_count").field("transaction_id")
)
);
// 执行查询
SearchResponse response = client.prepareSearch("my_index")
.setQuery(query)
.addAggregation(aggregation)
.execute()
.actionGet();
// 解析聚合结果
Histogram histogram = response.getAggregations().get("sales_over_time");
for (Histogram.Bucket bucket : histogram.getBuckets()) {
System.out.println("Date: " + bucket.getKeyAsString());
Terms productTypes = bucket.getAggregations().get("product_types");
for (Terms.Bucket productType : productTypes.getBuckets()) {
System.out.println("Product Type: " + productType.getKeyAsString());
Sum totalSales = productType.getAggregations().get("total_sales");
System.out.println("Total Sales: " + totalSales.getValue());
ValueCount transactionCount = productType.getAggregations().get("transaction_count");
System.out.println("Transaction Count: " + transactionCount.getValue());
}
}
// 关闭客户端
client.close();
}
}
```
这个示例通过ElasticSearch的Java API执行了一个聚合,其中包含了两层嵌套聚合,分别按照日期和产品类型对销售数据进行了汇总,输出了每个日期和产品类型的销售总额和交易次数。