在ES里面所有的聚合实例都由AggregationBuilders类提供静态方法构造,我们先看下常用有哪些方法使用:
(1)统计某个字段的数量
ValueCountBuilder vcb= AggregationBuilders.count("count_uid").field("uid");
(2)去重统计某个字段的数量(有少量误差)
CardinalityBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid");
(3)聚合过滤
FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));
(4)按某个字段分组
TermsBuilder tb= AggregationBuilders.terms("group_name").field("name");
(5)求和
SumBuilder sumBuilder= AggregationBuilders.sum("sum_price").field("price");
(6)求平均
AvgBuilder ab= AggregationBuilders.avg("avg_price").field("price");
(7)求最大值
MaxBuilder mb= AggregationBuilders.max("max_price").field("price");
(8)求最小值
MinBuilder min= AggregationBuilders.min("min_price").field("price");
(9)按日期间隔分组
DateHistogramBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date");
(10)获取聚合里面的结果
TopHitsBuilder thb= AggregationBuilders.topHits("top_result");
(11)嵌套的聚合
NestedBuilder nb= AggregationBuilders.nested("negsted_path").path("quests");
(12)反转嵌套
AggregationBuilders.reverseNested("res_negsted").path("kps ");
上面这些基本就是常用的聚合查询了,在嵌套(nested)下面的子聚合查询就是嵌套查询了,除了嵌套查询,其他的聚合查询也可以无限级添加子查询
举一个二级分组的例子:
SearchRequestBuilder search = client.prepareSearch("index").setTypes("type");
TermsBuilder one= AggregationBuilders.terms("group_name").field("name");
TermsBuilder two= AggregationBuilders.terms("group_age").field("age");
one.subAggregation(two)
search.addAggregation(one);
Terms terms= search.get().getAggregations().get("group_name");
for(Terms.Bucket name_buk:terms.getBuckets()){
//一级分组的内容
Terms terms_age= name_buk.getAggregations().get("group_age");
for(Terms.Bucket age_buk:terms_age.getBuckets()){
//二级分组的内容
System.out.println(name_buk.getKey()+" "+age_buk.getKey()+" "+age_buk.getDocCount());
}
}
注意上面的例子 ,二级子查询可以添加多种类型,比如第一级按照名字分组,第二级可以添加一个max或者min的子聚合查询。
下面看一个嵌套聚合的例子:
- //嵌套查询root节点
NestedBuilder nestedBuilder= AggregationBuilders.nested("negsted").path("quests");
//嵌套查询的子查询中分组count
TermsBuilder tb= AggregationBuilders.terms("group_name").field("quests.name");
//添加子查询到root节点里面
nestedBuilder.subAggregation(tb);
//获取一级嵌套
Nested ntd= search.get().getAggregations().get("negsted");
//打印一级嵌套的结果
System.out.println(ntd.getDocCount());
//从一级嵌套查询的结果中获取二级嵌套查询结果
Terms term= ntd.getAggregations().get("group_name");
//获取嵌套下面的结果
for(Terms.Bucket tbket:term.getBuckets()){
System.out.println(tbket.getKey()+" "+tbket.getDocCount());
}
嵌套的查询功能非常丰富,此外还有更强大Pipeline Aggregations聚合可以对上层的嵌套结果继续做操作,例如sql里面的having功能也可以实现,本篇简单的介绍了es的聚合查询的种类和简单使用,感兴趣的朋友可以通过官网详细学习下。
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
相关推荐
方法如果传总页数了,es就不用查询总页数,直接通过开始位置到结束位置取数即可
ES 聚合查询结果转换成相应的对象集合,ES 聚合查询结果转换成相应的对象集合
聚合查询分页测试termsAgg.size(2147483647); //指定最大统计显示多少行步骤1:全量聚合,size设置为: 2147483647。 ES5.X/6.X版本设置为2147483647 ,它等于2^31-1,请看该地方代码
基于SpringBoot+elasticsearch的操作项目,包含各种es的操作(插入记录、精准搜索、模糊搜索、聚合查询等) 基于SpringBoot+elasticsearch的操作项目,包含各种es的操作(插入记录、精准搜索、模糊搜索、聚合查询等...
es的简单查询和聚合查询用法说明,用于理解es的聚合查询和简单查询的思路过程,便于快速的应用es, 希望能有所帮助,谢谢
elasticsearch聚合
elasticsearch先聚合然后通过聚合后的值再进行过滤 a
Elasticsearch聚合 之 Terms
主要介绍了java使用elasticsearch分组进行聚合查询过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
ElasticSearch对数据进行聚合并对聚合结果值进行过滤查询
今天小编就为大家分享一篇关于JAVA使用Elasticsearch查询in和not in的实现方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
ElasticSearch查询学习;ElasticSearch查询学习;ElasticSearch查询学习;ElasticSearch查询学习;ElasticSearch查询学习;ElasticSearch查询学习;
elasticsearch python 查询的两种方法,具体内容如下所述: from elasticsearch import Elasticsearch es = Elasticsearch res1 = es.search(index=2018-07-31, body={query: {match_all: {}}}) print(es1) {'_...
基于elasticsearch使用Java创建索引、更新索引、删除索引、查询索引的一个小例子 http://blog.csdn.net/lom9357bye/article/details/52841711
ElasticSearch查询term,terms,match,...ElasticSearch查询cardinality,range,extended_stats聚合统计aggregations查询 ElasticSearch查询geo_distance,geo_bounding_box,geo_polygon地图检索geo查询 的Java实现
elasticsearch脚本实现先聚合,然后使用聚合的值进行后过滤
结合实际项目,使用ElasticSearch restful接口实现对ES的增删改查以及聚合查询
elasticsearch的一个例子,包含service和实体类。不包含基础入门内容。适合了解之后直接照搬代码
4.(后端技术篇java)ElasticSearch实现反向地址匹配服务(点周边查询服务) 5.(后端技术篇java)ElasticSearch实现矩形空间查询服务 6.(后端技术篇java)ElasticSearch实现圆形空间查询服务 7.(后端技术篇java)...
elasticsearch官网给的java API太过于片面,自己深究用java写的工具类集合,包括mapping创建,批量插入,聚合,模糊查询,精确查询等功能。