如需要统计某件商品的数量,最高价格,最低价格等就用到了聚合查询,就像数据库中的group by

    首先需要注入ElasticsearchTemplate

    @Autowired
private ElasticsearchTemplate elasticsearchTemplate;

    然后开始操作

    //聚合
public Map<String, Integer> polymerizationQuery() {
String aggName = "popularBrand";
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
//聚合
queryBuilder.addAggregation(AggregationBuilders.terms("popularBrand").field("brand"));
//查询并返回带聚合结果
AggregatedPage<Item> result = elasticsearchTemplate.queryForPage(queryBuilder.build(), Item.class);
//解析聚合
Aggregations aggregations = result.getAggregations();
//获取指定名称的聚合
StringTerms terms = aggregations.get(aggName);
//获取桶
List<StringTerms.Bucket> buckets = terms.getBuckets();
//遍历打印
Map<String, Integer> map = new HashMap<>();
for (StringTerms.Bucket bucket : buckets) {
map.put(bucket.getKeyAsString(), (int) bucket.getDocCount());
System.out.println("key = " + bucket.getKeyAsString());
System.out.println("DocCount = " + bucket.getDocCount());
}
return map;
}

  elasticseach的可视化数据

  其他方法

(1)统计某个字段的数量
ValueCountAggregationBuilder vcb= AggregationBuilders.count("自定义").field("uid");
(2)去重统计某个字段的数量
CardinalityAggregationBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid");
(3)聚合过滤
FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));
(4)按某个字段分组
TermsAggregationBuilder tb= AggregationBuilders.terms("group_name").field("name");
(5)求和
SumAggregationBuilder sumBuilder= AggregationBuilders.sum("sum_price").field("price");
(6)求平均
AvgAggregationBuilder ab= AggregationBuilders.avg("avg_price").field("price");
(7)求最大值
MaxAggregationBuilder mb= AggregationBuilders.max("max_price").field("price");
(8)求最小值
MinAggregationBuilder min= AggregationBuilders.min("min_price").field("price");
(9)按日期间隔分组
DateHistogramAggregationBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date");
(10)获取聚合里面的结果
TopHitsBuilder thb= AggregationBuilders.topHits("top_result");
(11
)嵌套的聚合
NestedAggregationBuilder
nb= AggregationBuilders.nested("negsted_path").path("quests");
(12)反转嵌套
AggregationBuilders.reverseNested("res_negsted").path("kps ");

  注:使用聚合查询时不能使用分词,因此字段需要设置为type = FieldType.Keyword

Spring Data Elasticsearch 聚合查询的更多相关文章

  1. 031 Spring Data Elasticsearch学习笔记---重点掌握第5节高级查询和第6节聚合部分

    Elasticsearch提供的Java客户端有一些不太方便的地方: 很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的 需要自己把对象序列化为json存储 查询到结果也需要自己 ...

  2. elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

    一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RE ...

  3. Elasticsearch基本用法(2)--Spring Data Elasticsearch

    Spring Data Elasticsearch是Spring Data项目下的一个子模块. 查看 Spring Data的官网:http://projects.spring.io/spring-d ...

  4. Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

    elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介.Java REST Client.Java Client.Spri ...

  5. Spring Data Elasticsearch基本使用

    目录 1. 创建工程 2. 配置application.yaml文件 3. 实体类及注解 4. 测试创建索引 5. 增删改操作 5.1增加 5.2 修改(id存在就是修改,否则就是插入) 5.3 批量 ...

  6. SprignBoot整合Spring Data Elasticsearch

    一.原生java整合elasticsearch的API地址 https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.2/java ...

  7. spring data elasticsearch 使用

    很久之前就安装了elasticsearch,一直没用java用过,最近看了一下spring data系列的elasticsearch,这里写一篇心得. 如果尚未安装elasticsearch,可以 参 ...

  8. springboot集成spring data ElasticSearch

    ES支持SpringBoot使用类似于Spring Data Jpa的方式查询,使得查询更加方便. 1.依赖引入 compile “org.springframework.boot:spring-bo ...

  9. SpringBoot整合Spring Data Elasticsearch

    Spring Data Elasticsearch提供了ElasticsearchTemplate工具类,实现了POJO与elasticsearch文档之间的映射 elasticsearch本质也是存 ...

随机推荐

  1. Jupyter Notebook 访问密码重置

    试想你访问 Jupyter Notebook ,突然忘记了访问密码,该怎么做.经实践,只需利用命令行重新设置下密码即可. ## step 1:终端输入 jupyter notebook --gener ...

  2. NOI 2019 退役记

    非常抱歉,因为不退役了,所以这篇退役记鸽了.

  3. c# linq分组 lambda分组

    var groupResults = from gr in models && gr.Temperature != && gr.Humidity != &&am ...

  4. CUDA编程学习笔记1

    CUDA编程模型是一个异构模型,需要CPU和GPU协同工作. host和device host和device是两个重要的概念 host指代CPU及其内存 device指代GPU及其内存 __globa ...

  5. [Python学习笔记-007] 使用PyEnchant检查英文单词

    最近在教儿子做自然拼读,跟他玩了一个单词游戏,就是利用简单的枚举找出适合小朋友学习的两个字母的单词.人工找寻难免有疏漏之处,这里使用PyEnchant给出一个简单的脚本. 01 - foo.py #! ...

  6. Pandas操作excel

    读取excel:Pandas库read_excel()参数详解 pandas.read_excel(io,sheet_name = 0,header = 0,names = None,index_co ...

  7. 基于 HTML5 WebGL 的 3D 智慧隧道漫游巡检

    前言 这次为大家展示的是通过 HT for Web 灵活的图型化编辑工具打造的智慧隧道监控系统.通过 HTML5 技术实现了桌面和移动端的跨平台性,同时现实了可视化运维. 这次主要跟大家分享里面的漫游 ...

  8. HDU 2007-11 Programming Contest

    Can you find it? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/Others ...

  9. 黑科技!仅需 3 行代码,就能将 Gitter 集成到个人网站中,实现一个 IM 即时通讯聊天室功能?

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  10. DatetimeHelper类的编写

    公共类 DAtaTimeHelper类的编写 public class Appointment { public DateTime StartDate { get; set; } public Dat ...