前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ElasticSearch 6.x 学习笔记:34.Java API之桶聚合

ElasticSearch 6.x 学习笔记:34.Java API之桶聚合

作者头像
程裕强
发布2022-05-06 19:24:24
2470
发布2022-05-06 19:24:24
举报
文章被收录于专栏:大数据学习笔记

https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/_bucket_aggregations.html

1、terms聚合

AggregationUtil.java中添加下面方法

代码语言:javascript
复制
 /**
     * 分组聚合
     * @param field
     * @return
     */
    public Terms terms(String field){
        AggregationBuilder agg=AggregationBuilders.terms("terms").field(field);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
        return response.getAggregations().get("terms");
    }

测试程序

代码语言:javascript
复制
package cn.hadron;
import cn.hadron.es.AggregationUtil;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;

public class AggregationDemo {
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        Terms terms=util.terms("salary");
        for(Terms.Bucket entry:terms.getBuckets()){
            System.out.println(entry.getKey()+":"+entry.getDocCount());
        }
    }
}

运行结果

代码语言:javascript
复制
15000:2
20000:2
17000:1
18000:1

2、filter聚合

代码语言:javascript
复制
/**
     * 过滤器聚合
     * @param field
     * @return
     */
    public Filter filter(String field, String key){
        QueryBuilder query=QueryBuilders.termQuery(field,key);
        AggregationBuilder agg=AggregationBuilders.filter("filter",query);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
        return response.getAggregations().get("filter");
    }
代码语言:javascript
复制
package cn.hadron;
import cn.hadron.es.AggregationUtil;
import org.elasticsearch.search.aggregations.bucket.filter.Filter;
public class AggregationDemo {
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        Filter filter=util.filter("gender","男");
        System.out.println(filter.getDocCount());
    }
}
代码语言:javascript
复制
4

3、filters聚合

代码语言:javascript
复制
/**
     * 多过滤器聚合
     * @return
     */
    public Filters filters(String field1, String key1, String field2, String key2){
        AggregationBuilder agg=AggregationBuilders.filters("filters",
                new FiltersAggregator.KeyedFilter(key1,QueryBuilders.termQuery(field1,key1)),
                new FiltersAggregator.KeyedFilter(key2,QueryBuilders.termQuery(field2,key2)));
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
        return response.getAggregations().get("filters");
    }
代码语言:javascript
复制
package cn.hadron;
import cn.hadron.es.AggregationUtil;
import org.elasticsearch.search.aggregations.bucket.filter.Filters;
public class AggregationDemo {
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        Filters agg=util.filters("gender","男","dep","bigdata");
        for(Filters.Bucket entry:agg.getBuckets()){
            System.out.println(entry.getKey()+":"+entry.getDocCount());
        }
    }
}
代码语言:javascript
复制
bigdata:3
男:4

4、range聚合

代码语言:javascript
复制
    /**
     * 区间聚合
     * @param field
     * @return
     */
    public Range range(String field,double to,double from){
        AggregationBuilder agg=AggregationBuilders
                .range("range")
                .field(field)
                .addUnboundedTo(to)//第1个范围 ( ,to)
                .addRange(to,from)//第2个范围[to,from)
                .addUnboundedFrom(from);//第3个范围[from,)
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
        return response.getAggregations().get("range");
    }
代码语言:javascript
复制
package cn.hadron;
import cn.hadron.es.AggregationUtil;
import org.elasticsearch.search.aggregations.bucket.range.Range;

public class AggregationDemo {
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        Range agg=util.range("salary",10000,20000);
        for(Range.Bucket entry:agg.getBuckets()){
            System.out.println(entry.getKey()+":"+entry.getDocCount());
        }
    }
}
代码语言:javascript
复制
*-10000.0:0
10000.0-20000.0:4
20000.0-*:2

5、dateRange聚合

代码语言:javascript
复制
/**
     * 日期区间聚合
     * @param field
     * @return
     */
    public Range dateRange(String field,String to,String from){
        AggregationBuilder agg=AggregationBuilders
                .dateRange("dateRange")
                .field(field)
                .format("yyyy-MM-dd")
                .addUnboundedTo(to)
                .addUnboundedFrom(from);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
        return response.getAggregations().get("dateRange");
    }
代码语言:javascript
复制
package cn.hadron;
import cn.hadron.es.AggregationUtil;
import org.elasticsearch.search.aggregations.bucket.range.Range;

public class AggregationDemo {
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("website");
        Range agg=util.dateRange("postdate","now-12M/M","now-12M/M");
        for(Range.Bucket entry:agg.getBuckets()){
            System.out.println(entry.getKey()+":"+entry.getDocCount());
        }
    }
}
代码语言:javascript
复制
*-2017-02-01:8
2017-02-01-*:1

6、missing聚合

代码语言:javascript
复制
 /**
     * Missing聚合
     * @param field
     * @return
     */
    public Missing missing(String field){
        AggregationBuilder agg=AggregationBuilders.missing("missing").field(field);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
        return response.getAggregations().get("missing");
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、terms聚合
  • 2、filter聚合
  • 3、filters聚合
  • 4、range聚合
  • 5、dateRange聚合
  • 6、missing聚合
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档