当前位置: 首页 > news >正文

ES聚合(仅供自己参考)

1、聚合:可以实现对文档数据的统计、分析、运算。聚合常见的是三大类

2、聚合的分类:

   1、桶(Bucket)聚合:用来对文档做分组

     + TermAggregation:按照文档字段值分组

      + Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组

2、度量(Metric)聚合:用以计算一些值,AVG,MAX,MIN,SUM,STATS(都做前面的几个)

3、管道聚合(Pipeline):其他聚合的结果为基础做聚合(比如度量和桶的结果做基础)

4、参与聚合的字段不能是可分词的(Text类型):keyword,Date,数值,布尔

#桶聚合,按照字段品牌来分类
GET /hotel/_search
{"size": 0,"aggs": {"brandAgg": {"terms": {"field": "brand","size": 25}}}
}#同聚合,按照字段品牌来分类,同时指定排序方式GET /hotel/_search
{"size": 0,        #指定文档输出的数量"aggs": {"brandAgg": {"terms": {            #分类的类型"field": "brand",    #分类的字段"size": 20,            #分类的大小"order": {"_count": "asc"      #输出的顺序,默认为降序}}}}
}#桶聚合,因为数据可能很多,通过查询条件筛选之后在做分类
GET /hotel/_search
{"query": {"range": {"price": {"lte": 200}}}, "size": 0,"aggs": {"brandAgg": {"terms": {"field": "brand","size": 10}}}
}

聚合嵌套和Metric聚合

#metric聚合和桶聚合和度量聚合的嵌套GET /hotel/_search
{"size": 0, "aggs": {"brandAgg": {"terms": {"field": "brand","size": 20,"order": {"scoreAgg.avg": "asc"}},"aggs": {        #内嵌一个agg,使得上面每个分类自己计算自己"scoreAgg": {"stats": {"field": "score"}}}}}
}

java代码:

package cn.itcast.hotel;import com.google.protobuf.MapEntry;
import lombok.val;
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;@SpringBootTest
public class HotelAggText {private RestHighLevelClient client;@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.136.128:9200")));}@AfterEachvoid tearDown() {try {client.close();} catch (IOException e) {throw new RuntimeException(e);}}@Testpublic void bucketAggTest() throws IOException {SearchRequest request = new SearchRequest("hotel");request.source().size(0);request.source().aggregation(AggregationBuilders.terms("brandAgg").field("brand").size(20));request.source().aggregation(AggregationBuilders.terms("starName").field("starName").size(10));//查询城市cityrequest.source().aggregation(AggregationBuilders.terms("city").field("city").size(5));SearchResponse response = client.search(request, RequestOptions.DEFAULT);print(response);}private void print(SearchResponse response){Aggregations aggregations = response.getAggregations();Terms brandAgg = aggregations.get("brandAgg");Terms city =aggregations.get("city");List<? extends Terms.Bucket> buckets = brandAgg.getBuckets();for (Terms.Bucket bucket : buckets) {System.out.println(bucket.getKey() +"  "+bucket.getDocCount());}List<? extends Terms.Bucket> buckets1 = city.getBuckets();for (Terms.Bucket bucket : buckets1) {System.out.println(bucket.getKey() +"  "+bucket.getDocCount());}//Map<String, Aggregation> asMap = aggregations.getAsMap();//Aggregation brandAgg = asMap.get("brandAgg");//Map<String, Object> metadata = brandAgg.getMetadata();//for (Map.Entry<String, Object> entry : metadata.entrySet()) {//    System.out.println(entry.getKey() + "  "+entry.getValue());//}}
}


http://www.mrgr.cn/news/62617.html

相关文章:

  • WPF中设置DataGrid的常用样式
  • GDB(GNU Debugger)的使用教程
  • 打算报2025年软考高项的,有这篇备考攻略就够了!
  • 【LeetCode】两数之和、大数相加
  • 乘云而上,OceanBase再越山峰
  • 第三十三篇:TCP协议如何避免/减少网络拥塞,TCP系列八
  • 【安全性分析】BAN逻辑 (BAN Logic)之详细介绍
  • 天润融通邀您参加AI破局·聚力增长行业论坛
  • 去人声留伴奏免费软件,这四款软件可别错过
  • 智能码二维码zhinengma.cn如何赋能工业产品质量安全追溯
  • 【深度学习】实验 — 动手实现 GPT【二】:注意力机制、注意力掩码、多头注意力机制
  • ABAP RFC SQL 模糊查询和多个区间条件
  • 一些老程序员不愿透露的工作小技巧…
  • 【HDRP下实现视差效果_CubeMap和九宫格ArrayMap形式】
  • 2024年“炫转青春”山东省飞盘联赛盛大开赛——临沭县青少年飞盘运动迅速升温
  • 隐私保护下的数据提取策略
  • USC H5S支持大华ICC平台对接
  • QT:QThread:重写run函数
  • python函数连续
  • ARM base instruction -- adc
  • 2181、合并零之间的节点
  • YOLOv4和Darknet实现坑洼检测
  • 如何成为一名优秀的程序员,进来看看
  • 网络安全不知道怎么学,看完这篇,中学生都能学会
  • iOS 再谈KVC、 KVO
  • 阿里CDN框架