java 通过聚合查询实现elasticsearch的group by后的数量

通过聚合查询获取group by 后的数量

/**
     * 获取key的个数
     *
     * @param key   要group by的字段名
     * @param index 索引名称
     * @return id的个数
     */
    public static int getKeyCount(String key, String index) {
        int count = 0;
        TransportClient client = null;
        try {
            client = connectionPool.getConnection();
            if (client == null) {
                throw new Exception("没有获取到连接!");
            }
            SearchRequestBuilder search = client.prepareSearch(index);
            //cardinality聚合查询,相当于groupby字段名
            SearchResponse sr = search.addAggregation(AggregationBuilders.cardinality(key + "_count").field(key)).execute().actionGet();
            //从返回数据提取id总数
            Cardinality result = sr.getAggregations().get(key + "_count");
            long value = result.getValue();
            count = (int) value;
        } catch (InterruptedException e) {
        } catch (Exception e) {
            logger.error("getKeyCount错误", e);
        } finally {
            connectionPool.releaseConnection(client);
        }
        return count;
    }

获取group by后的所有key值

/**
     * 获取所有key
     *
     * @param key   被group by的字段名
     * @param index 索引名称
     * @return 所有id
     */
    public static List<String> getAllKey(String key, String index) {
        int keyCount = getKeyCount(key, index);
        List<String> strings = new ArrayList<>();
        TransportClient client = null;
        try {
            client = connectionPool.getConnection();
            if (client == null) {
                throw new Exception("没有获取到数据库连接!");
            }
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index);
            //使用聚合,实现去重查询
            SearchResponse searchResponse = searchRequestBuilder.
                    addAggregation(AggregationBuilders.terms("models").field(key).size(keyCount)).execute().actionGet();
            Terms term = searchResponse.getAggregations().get("models");
            List<? extends Terms.Bucket> buckets = term.getBuckets();
            //遍历结果,提取出id
            for (Terms.Bucket bucket : buckets) {
                String keyAsString = bucket.getKeyAsString();
                strings.add(keyAsString);
            }
            buckets.clear();
        } catch (InterruptedException e) {

        } catch (Exception e) {
            logger.error("getAllKey错误", e);
        } finally {
            connectionPool.releaseConnection(client);
        }

        return strings;
    }

到此这篇关于Java通过聚合查询获取group by 后的数量的文章就介绍到这了,更多相关Java 聚合查询获取group by数量内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java Fluent Mybatis 聚合查询与apply方法详解流程篇

    前言 接着上一篇文章:Java Fluent Mybatis 分页查询与sql日志输出详解流程篇 我把分页已经调整好了,现在实验一下官方给出的聚合查询方法. GitHub代码仓库:GitHub仓库 数据准备 为了聚合查询的条件,添加了几条数据. MIN 我们试着获取最小的年龄. 方法实现 @Override public Integer getAgeMin() { Map<String, Object> result = testFluentMybatisMapper .findOneMap(

  • Java elasticsearch安装以及部署教程

    1 概述 1.1 Elastic Stack的核心 The Elastic Stack,包括ElasticSearch,Kibana,Beats和Logstash(也称为ELK Stack) 能够安全可靠的获取任何来源,任何格式的数据,然后实时的对诗句进行搜索,分析和可视化 Elasticsearch,简称ES,ES是一个开源的高扩展的分布式全文搜索引擎 是整个Elastic Stack技术栈的核心,它可以近乎实时的存储,检索数据 1.2 Elasticsearch And Solr(对比图)

  • java使用elasticsearch分组进行聚合查询过程解析

    这篇文章主要介绍了java使用elasticsearch分组进行聚合查询过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 java连接elasticsearch 进行聚合查询进行相应操作 一:对单个字段进行分组求和 1.表结构图片: 根据任务id分组,分别统计出每个任务id下有多少个文字标题 1.SQL:select id, count(*) as sum from task group by taskid; java ES连接工具类 p

  • java 通过聚合查询实现elasticsearch的group by后的数量

    通过聚合查询获取group by 后的数量 /** * 获取key的个数 * * @param key 要group by的字段名 * @param index 索引名称 * @return id的个数 */ public static int getKeyCount(String key, String index) { int count = 0; TransportClient client = null; try { client = connectionPool.getConnecti

  • Sequelize中用group by进行分组聚合查询

    一.SQL与Sequelize中的分组查询 1.1 SQL中的分组查询 SQL查询中,通GROUP BY语名实现分组查询.GROUP BY子句要和聚合函数配合使用才能完成分组查询,在SELECT查询的字段中,如果没有使用聚合函数就必须出现在ORDER BY子句中.分组查询后,查询结果为一个或多个列分组后的结果集. GROUP BY语法 SELECT 列名, 聚合函数(列名) FROM 表名 WHERE 列名 operator value GROUP BY 列名 [HAVING 条件表达式] [W

  • JAVA mongodb 聚合几种查询方式详解

    一.BasicDBObject 整个聚合查询是统计用户的各种状态下的用户数量为场景: 1.筛选条件: date为查询日期: BasicDBObject Query = new BasicDBObject(); Query.put("time",new BasicDBObject("$gte", date + " 00:00:00") .append("$lte", date + " 23:59:59"));

  • Elasticsearch聚合查询及排序操作示例

    目录 1 es排序 2 match和match的区别 3 分页查询 4 es 组合查询 5 结果过滤展示字端 6 结果高亮展示 7 聚合查询avg.max.min.sum.分组 8 mapping和_template模版 9 ik分词 10 term和match的区别 1 es排序 # 1 排序 GET jeff/doc/_search { "query": { "match": { "from": "gu" } }, &qu

  • MySQL 数据库聚合查询和联合查询操作

    目录 1. 插入被查询的结果 2. 聚合查询 2.1 介绍 2.2 聚合函数 2.3 group by 子句 2.4 having 3. 联合查询 3.1 介绍 3.2 内连接 3.3 外连接 3.4 自连接 3.5 子查询 3.6 合并查询 1. 插入被查询的结果 语法: insert into 要插入的表 [(列1, ..., 列n)] select {* | (列1, ..., 列n)}from 要查询的表 上述语句可以将要查询的表的某些列插入到新的表中对应的某些列 示例1: 将 stud

  • MySQL聚合查询与联合查询操作实例

    目录 一.聚合查询 1.聚合函数(count,sum,avg...) 2.GROUPBY子句 3.HAVING 二.联合查询((重点)多表) 1.内连接 2.外连接 3.自连接 4.子查询 5.合并查询 总结 一. 聚合查询 1.聚合函数(count,sum,avg...) 常见的统计总数.计算平局值等操作,可以使用聚合函数来实现,常见的聚合函数有: 注意最后面都是可以加上where,order by这些语句的,这些聚合函数会根据这些语句的结果集来进行查询 后面最好不要加上limit,因为MyS

  • MySQL 数据库聚合查询和联合查询操作

    目录 1.插入被查询的结果 2.聚合查询 2.1介绍 2.2聚合函数 2.3groupby子句 2.4having 3.联合查询 3.1介绍 3.2内连接 3.3外连接 3.4自连接 3.5子查询 3.6合并查询 1. 插入被查询的结果 语法: insert into 要插入的表 [(列1, ..., 列n)] select {* | (列1, ..., 列n)}from 要查询的表 上述语句可以将要查询的表的某些列插入到新的表中对应的某些列 2. 聚合查询 2.1 介绍 聚合查询:是指对一个数

  • DoytoQuery 聚合查询方案示例详解

    目录 1. 引言 2. 聚合查询映射 2.1. 前缀映射 2.2. 分组聚合 2.3. HAVING 2.4. 动态查询 2.5. 查询接口定义 3. 完整示例 4. 总结 1. 引言 聚合查询是数据库提供的另一种常用的用于数据的统计和计算的查询功能,它通过提供一系列聚合函数来汇总来自多个行的信息. DoytoQuery采用字段前缀映射的方式来将字段名映射为聚合函数,再配合@GroupBy注解,Having接口以及Query对象,完成整条聚合查询语句的映射. 2. 聚合查询映射 2.1. 前缀映

随机推荐