SpringBoot集成Elasticsearch7.x(3)|(aggregations之指標(biāo)聚合查詢)
章節(jié)
第一章鏈接: SpringBoot集成Elasticsearch7.x(1)|(增刪改查功能實(shí)現(xiàn))
第二章鏈接: SpringBoot集成Elasticsearch7.x(2)|(復(fù)雜查詢)
第三章鏈接: SpringBoot集成Elasticsearch7.x(3)|(aggregations之指標(biāo)聚合查詢)
第四章鏈接: SpringBoot集成Elasticsearch7.x(4)|(aggregations之分桶聚合查詢)
第五章鏈接: SpringBoot集成Elasticsearch7.x(5)|(term、match、match_phrase區(qū)別)
第六章鏈接: SpringBoot集成Elasticsearch8.x(6)|(新版本Java API Client使用)
第七章鏈接: SpringBoot集成Elasticsearch8.x(7)|(新版本Java API Client使用完整示例)
前言
本章節(jié)主要介紹SpringBoot項(xiàng)目集成ElasticSearch的一些相關(guān)知識(shí),主要介紹的是基于Java High Level REST Client方式實(shí)現(xiàn)ElasticSearch分組聚合(aggregations)查詢操作以及對(duì)應(yīng)kibana控制臺(tái)JSON格式訪問對(duì)照。
一、ElasticSearch中Aggs是什么?
es的aggs可以分為 指標(biāo)聚合(metrice)、分桶聚合(bucket)、 管道聚合(pipeline),分通聚合相當(dāng)于sql的group by 能按照某一個(gè)或多個(gè)條件,對(duì)數(shù)據(jù)進(jìn)行分桶(分組),默認(rèn)返回?cái)?shù)據(jù)的count(計(jì)數(shù))條數(shù),但實(shí)際上,可以理解為數(shù)據(jù)被分桶了,方便后面的聚合或者統(tǒng)計(jì)操作。指標(biāo)聚合就是對(duì)分桶,或者未分桶的數(shù)據(jù)進(jìn)行計(jì)算,例如avg求平均值,MAX最大值,min最小值,value count 計(jì)數(shù) cardinality 基數(shù) 去重 starts 統(tǒng)計(jì)聚合等。管道聚合基于聚合結(jié)果的查詢,分桶有可能是多層的,也有可能和指標(biāo)是仙桃的,管道聚合可以根據(jù)路徑(分桶和指標(biāo)聚合時(shí)候的命名路徑)對(duì)數(shù)據(jù)進(jìn)行有針對(duì)性的操作,例如排序。
二、指標(biāo)聚合查詢
1.求和(sum)
查詢所有城市景點(diǎn)票價(jià)總和
GET /architecture_index/_search
{
"size": 0,
"aggs": {
"sum_price": {
"sum": {
"field": "price"
}
}
}
}
實(shí)現(xiàn)代碼如下
/**
* 聚合查詢所有景點(diǎn)門票和
* @throws IOException
*/
@Test
public void searchSum() throws IOException {
//定義請求對(duì)象
SearchRequest request = new SearchRequest("architecture_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//制定檢索條件
sourceBuilder.query(QueryBuilders.matchAllQuery())
.aggregation(AggregationBuilders.sum("sum_price").field("price"));
//組裝
request.source(sourceBuilder);
//執(zhí)行
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
//打印數(shù)據(jù)
Aggregations aggregations = response.getAggregations();
System.out.println(JSON.toJSONString(aggregations.getAsMap().get("sum_price")));
}
2.求總數(shù)(count)
查詢所有城市景點(diǎn)票價(jià)總和
GET /architecture_index/_search
{
"size": 0,
"aggs": {
"count_name": {
"value_count": {
"field": "name.keyword"
}
}
}
}
實(shí)現(xiàn)代碼如下
/**
* 聚合查詢所有景點(diǎn)總數(shù)
* @throws IOException
*/
@Test
public void searchCount() throws IOException {
//定義請求對(duì)象
SearchRequest request = new SearchRequest("architecture_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//制定檢索條件
sourceBuilder.query(QueryBuilders.matchAllQuery())
.aggregation(AggregationBuilders.count("count_name").field("name.keyword"));
//組裝
request.source(sourceBuilder);
//執(zhí)行
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
//打印數(shù)據(jù)
Aggregations aggregations = response.getAggregations();
System.out.println(JSON.toJSONString(aggregations.getAsMap().get("count_name")));
}
3.stats聚合
針對(duì)數(shù)字類型的查詢,一次性查詢出最低、最高、總和、總數(shù)量、平均值等
GET /architecture_index/_search
{
"size": 0,
"aggs": {
"status_price": {
"stats": {
"field": "price"
}
}
}
}
實(shí)現(xiàn)代碼如下
/**
* 查詢門票價(jià)格 最大值,最小值,平均值等
* @throws IOException
*/
@Test
public void searchStats() throws IOException {
//定義請求對(duì)象
SearchRequest request = new SearchRequest("architecture_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//制定檢索條件
sourceBuilder.query(QueryBuilders.matchAllQuery())
.aggregation(AggregationBuilders.stats("status_price").field("price"));
//組裝
request.source(sourceBuilder);
//執(zhí)行
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
//打印數(shù)據(jù)
Aggregations aggregations = response.getAggregations();
System.out.println(JSON.toJSONString(aggregations.getAsMap().get("status_price")));
}
3.stats聚合
只統(tǒng)計(jì)總數(shù)、平均值
GET /architecture_index/_search
{
"size": 0,
"aggs": {
"count_name": {
"value_count": {
"field": "name.keyword"
}
},
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
實(shí)現(xiàn)代碼如下文章來源:http://www.zghlxwxcb.cn/news/detail-452002.html
/**
* 求和 以及求平均值
* @throws IOException
*/
@Test
public void search2() throws IOException {
//定義請求對(duì)象
SearchRequest request = new SearchRequest("architecture_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//制定檢索條件
sourceBuilder.query(QueryBuilders.matchAllQuery())
.aggregation(AggregationBuilders.count("count_name").field("name.keyword"))
.aggregation(AggregationBuilders.avg("avg_price").field("price"));
//組裝
request.source(sourceBuilder);
//執(zhí)行
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
//打印數(shù)據(jù)
Aggregations aggregations = response.getAggregations();
System.out.println(JSON.toJSONString(aggregations.getAsMap().get("count_name")));
System.out.println(JSON.toJSONString(aggregations.getAsMap().get("avg_price")));
}
總結(jié)
以上就是SpringBoot集成Elasticsearch數(shù)據(jù)庫內(nèi)容,在驗(yàn)證過程中遇到很多問題,如果大家在使用過程中遇到問題歡迎留言。文章來源地址http://www.zghlxwxcb.cn/news/detail-452002.html
到了這里,關(guān)于SpringBoot集成Elasticsearch7.x(3)|(aggregations之指標(biāo)聚合查詢)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!