当前位置: 首页 > news >正文

ES 聚合查询

聚合查询的官网地址 

Aggregations | Elasticsearch Guide [7.0] | Elastic

聚合查询主要分为四类

Metrics Aggregations -- 指标聚合

Bucket Aggregations -- 桶聚合

Pipeline Aggregations -- 管道聚合

Matrix Aggregations -- 矩阵聚合

Metrics Aggregations

 Sum Aggregations 求和

相当于sql sum()函数

POST /sales/_search?size=0
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "match" : { "type" : "hat" }
            }
        }
    },
    "aggs" : {
        "hat_prices" : { "sum" : { "field" : "price" } }
    }
}
AggregationBuilder aggBuilder = AggregationBuilders.sum("hat_prices").field("price");
            searchSourceBuilder.aggregation(aggBuilder);
            searchRequest.source(searchSourceBuilder);
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            Aggregations aggregations = searchResponse.getAggregations();
            Sum sumAgg = aggregations.get("hat_prices");
return (long) sumAgg.getValue();
Cardinality Aggregations 统计去重后行数

相当于sql 的count(distinct(0)) 函数使用

注意:只能求查询结果集的计数,聚合后的结果集的计数统计不了

POST /sales/_search?size=0
{
    "aggs" : {
        "type_count" : {
            "cardinality" : {
                "field" : "type"
            }
        }
    }
}
CardinalityAggregationBuilder aggBuilder = AggregationBuilders.cardinality("type_count").field("type");
            searchSourceBuilder.aggregation(aggBuilder);
            searchRequest.source(searchSourceBuilder);
            SearchResponse cardinality = client.search(searchRequest, RequestOptions.DEFAULT);
Cardinality aggResult = cardinality.getAggregations().get("type_count");
return aggResult.getValue();

 聚合之间能嵌套聚合

group by 和having 结合使用

使用了Mettics Aggregations 中的 terms aggregations 、sum aggregations和Pipeline Aggregations 中的 bucketSelector aggredations

聚合后的结果集计数,只能将size的值调整到较大值,获取桶的数量来获取计数结果

int size = result.getBuckets().size();

相当于sql

group by type
having sum(price) >= 100000
POST /sales/_search?size=0
"aggs": {
        "group_by_type": {
            "terms": {
                "field": "type",
                "size": 100000 // 调整桶的大小
            },
            "aggs": {
                "sum_price": {
                    "sum": {
                        "field": "price"
                    }
                },
                "having_sum_price": {
                    "bucket_selector": {
                        "buckets_path": {
                            "_velue0": "sum_price"
                        },
                        "script": "params._value0 >= 100000"
                    }
                }
        }
    }
searchSourceBuilder.aggregation(AggregationBuilders.terms("group_by_type").field("type").size(100000)
                    .subAggregation(AggregationBuilders.sum("sum_price").field("price"))
                    .subAggregation(PipelineAggregatorBuilders.bucketSelector("having_sum_price", new Script("params._value0 >= 100000"), "sum_price"))
            );
            searchRequest.source(searchSourceBuilder);
            SearchResponse cardinality = client.search(searchRequest, RequestOptions.DEFAULT);
            Terms result = cardinality.getAggregations().get("group_by_type");

聚合分页查询

相关文章:

  • 数据安全的守护者:备份文件的重要性及自动化备份策略
  • 自学嵌入式第28天-----select,
  • BambuStudio学习笔记:MarchingSquares类
  • mysql中如何保证没有幻读发生
  • 道可云人工智能每日资讯|亚马逊云业务部门成立智能体人工智能团队
  • 解析调控网络之竞争结合
  • 只要四行代码就能解决mac上运行exe文件的问题
  • 05-2基于vs2022的c语言笔记——表达式
  • Mysql-经典故障案例(1)-主从同步由于主键问题引发的故障
  • 深度学习Save Best、Early Stop
  • Quadrotor-NMPC-Control 开源项目复现与问题记录
  • 03.06 QT
  • ComfyUI进阶教程核心要点与详解
  • 多模态模型在做选择题时,如何设置Prompt,如何精准定位我们需要的选项
  • 【Kubernetes 指南】基础入门——Kubernetes 基本概念(四)
  • Python在DevOps中的应用:自动化CI/CD管道的实现
  • 【电控笔记z29】扰动估测器DOB估测惯量J-摩擦系数B
  • 私有云基础架构与运维(一)
  • Mybatis中的设计模式
  • SpringBoot+Vue 多模块(子父工程)项目的注册登录及增删改查
  • 网络代理修复怎么解决/广东短视频seo搜索哪家好
  • 寿光专业做网站的公司/如何做好一个品牌推广
  • 网站的ppt方案怎么做/百度官网客服
  • 上海有哪些做网站/站长统计网站统计
  • 微信文档/长尾词seo排名优化
  • h5商城网站怎么建立/东莞seo管理