首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ElasticSearch 6.x 学习笔记:34.Java API之桶聚合

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

作者头像
程裕强
发布于 2022-05-06 11:24:24
发布于 2022-05-06 11:24:24
28600
代码可运行
举报
运行总次数:0
代码可运行

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

1、terms聚合

AggregationUtil.java中添加下面方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 /**
     * 分组聚合
     * @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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
15000:2
20000:2
17000:1
18000:1

2、filter聚合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * 过滤器聚合
     * @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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
4

3、filters聚合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * 多过滤器聚合
     * @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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
bigdata:3
:4

4、range聚合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 区间聚合
     * @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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
*-10000.0:0
10000.0-20000.0:4
20000.0-*:2

5、dateRange聚合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * 日期区间聚合
     * @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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
*-2017-02-01:8
2017-02-01-*:1

6、missing聚合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 /**
     * 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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ElasticSearch 6.x 学习笔记:33.Java API之指标聚合
https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/java-aggs.html To build aggregation requests, use AggregationBuilders helpers. Just import them in your class:
程裕强
2022/05/06
3060
ElasticSearch java API - 聚合查询
以球员信息为例,player索引的player type包含5个字段,姓名,年龄,薪水,球队,场上位置。
林老师带你学编程
2019/05/25
2.2K0
使用Java操作Elasticsearch(Elasticsearch的java api使用)
1、Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询,格式是json。
别先生
2019/10/23
11.6K0
使用Java操作Elasticsearch(Elasticsearch的java api使用)
ElasticSearch 6.x 学习笔记:22.桶聚合
https://www.elastic.co/guide/en/elasticsearch/reference/6.1/search-aggregations-bucket.html 在页面右下角可以看到各类具体的Bucket聚合连接
程裕强
2022/05/06
9510
ElasticSearch 6.x 学习笔记:22.桶聚合
ElasticSearch入门之彼行我释(四)
散仙在上篇文章中,介绍了关于ElasticSearch基本的增删改查的基本粒子,本篇呢,我们来学下稍微高级一点的知识: (1)如何在ElasticSearch中批量提交索引 ? (2)如何使用高级查询(包括,检索,排序,过滤,分页) ? (3)如何组合多个查询 ? (4)如何使用翻页深度查询 ? (5)如何使用基本的聚合查询 ? (一)首先,我们思考下,为什么要使用批量添加,这个毫无疑问,因为效率问题,举个在生活中的例子,假如我们有50个人,要去美国旅游,不使用批处理的方式是,给每一个
我是攻城师
2018/05/11
9460
ES聚合操作
shengjk1
2025/05/16
620
ElasticSearch之Java Api聚合分组实战
最近有个日志收集监控的项目采用的技术栈是ELK+JAVA+Spring,客户端语言使用的是Java,以后有机会的话可以试一下JavaScript+Nodejs的方式,非常轻量级的组合,只不过不太适合服务化的工程,Kibana充当可视化层,功能虽然非常强大和灵活,但是需要业务人员懂Lucene的查询语法和Kibana的Dashboard仪表盘自定义功能才能玩的转,所以Kibana面向专业的开发人员和运维人员比较良好,但面向业务人员则稍微有点难度,我们这边就使用Java进行二次开发,然后前端定义几个业务人员关注
我是攻城师
2018/05/14
2.2K0
ElasticSearch 6.x 学习笔记:29.Java API之Match All Query
https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/java-query-dsl.html Elasticsearch provides a full Java query dsl in a similar manner to the REST Query DSL. The factory for query builders is QueryBuilders. Once your query is ready, you can use the Search API. Elasticsearch以类似于REST Query DSL的方式提供完整的Java查询dsl。 查询构建器的工厂是QueryBuilders。 一旦您的查询准备就绪,您可以使用搜索API。
程裕强
2022/05/06
5710
elasticsearch实践之代码结构设计
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhiqiang0316/article/details/81192994
林老师带你学编程
2019/05/26
1.2K0
java api使用ElastichSearch指南
比如想要addr是beijing的,同时必须满足条件:name是 paxi,或者,phoneNumber是 1234567890
爬蜥
2019/07/09
1.5K0
ElasticSearch AggregationBuilders java api常用聚会查询
以球员信息为例,player索引的player type包含5个字段,姓名,年龄,薪水,球队,场上位置。 index的mapping为:
小勇DW3
2019/12/31
4.1K0
SpringBoot2.2.X整合ElasricSearch7.8
这里默认大家已经掌握es基础语法 es版本为7.8 pom <!--引入es-high-level-client的坐标--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.8.0</version>
暴躁的程序猿
2022/07/12
2970
ES进阶 -- Java客户端
1. java集成es快速入门 参照 //快速入门 @Test void testmatchall() throws IOException { //1.准备request SearchRequest request = new SearchRequest("hotel"); //2. 准备dsl request.source().query(QueryBuilders.matchAllQuery());
用户10521079
2023/05/04
1.6K0
ES进阶 -- Java客户端
es_分组-分页-TransportClient实现
Elasticsearch Java API 有四种实现方式:分别是 TransportClient、RestClient、Jest、Spring Data Elasticsearch。 本文使用第一种方式,也就是 TransportClient 的方式进行实现。想要了解其他三种的方式可以看一下这篇文章:https://blog.csdn.net/qq_3331...
伍六七AI编程
2019/10/08
1.2K0
万字长文:详解 Spring Boot 中操作 ElasticSearch
ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多员工能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
程序员小强
2020/04/15
3.2K0
【ES三周年】+Elasticsearch 在大数据的应用
作为一个开源的分布式全文搜索和分析引擎,Elasticsearch(以下简称ES)已经在不少企业应用中发挥了重要作用。ES最早是由Shay Banon于2010年创建,经过多年的发展,现已成为一个功能丰富、性能优越的大数据搜索引擎。本文将介绍ES的一些关键知识点、技术原理和操作实践,并结合Java代码示例进行讲解,以帮助开发者更好地了解和应用ES。
Maynor
2023/02/14
8340
Elasticsearch项目实战,商品搜索功能设计与实现!
在SpringBoot中使用Elasticsearch本文不再赘述,直接参考《mall整合Elasticsearch实现商品搜索》即可。这里需要提一下,对于需要进行中文分词的字段,我们直接使用@Field注解将analyzer属性设置为ik_max_word即可。
macrozheng
2020/04/24
3.9K0
elasticsearch的restful API和Java API
本人现在使用的是elasticsearch 5.2.1的,服务器IP为192.168.5.182.所以在Java API和jar包中会有所不同.
算法之名
2019/08/20
2.2K0
ES[7.6.x]学习笔记(十一)与SpringBoot结合
在前面的章节中,我们把ES的基本功能都给大家介绍完了,从ES的搭建、创建索引、分词器、到数据的查询,大家发现,我们都是通过ES的API去进行调用,那么,我们在项目当中怎么去使用ES呢?这一节,我们就看看ES如何与我们的SpringBoot项目结合。
小忽悠
2020/05/27
9760
ES[7.6.x]学习笔记(十一)与SpringBoot结合
ElasticSearch入门
    全文搜索属于最常见的需求,开源的 Elasticsearch是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。 ElasticSearch 的底层是开源库 Lucene,Elasticsearch 是 Lucene 的封装,它提供了 REST API 的操作接口,开箱即用。
Java架构师必看
2021/05/14
1.3K0
推荐阅读
相关推荐
ElasticSearch 6.x 学习笔记:33.Java API之指标聚合
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验