elasticsearch——数据聚合

这篇具有很好参考价值的文章主要介绍了elasticsearch——数据聚合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

聚合的种类

聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类:

桶(Bucket)聚合:用来对文档做分组

      TermAggregation:按照文档字段值分组

       Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组

度量(Metric)聚合:用以计算一些值,比如:最大值、最小值、平均值等

        Avg:求平均值

        Max:求最大值

        Min:求最小值

        Stats:同时求max、min、avg、sum等

管道(pipeline)聚合:其它聚合的结果为基础做聚合

参与聚合的字段类型必须是:

        keyword

        数值

        日期

        布尔

DSL实现聚合

Bucket聚合

简单聚合

现在,我们要统计所有数据中的酒店品牌有几种,此时可以根据酒店品牌的名称做聚合。 类型为term类型,DSL示例:

GET /hotel/_search
{
  "size": 0,
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 10
      }
    }
  }
}

结果排序

默认情况下,Bucket聚合会统计Bucket内的文档数量,记为_count,并且按照_count降序排序。 我们可以修改结果排序方式:

GET /hotel/_search
{
  "size": 0,
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 10,
        "order": {
          "_count": "asc"
        }
      }
    }
  }
}

限定聚合范围

默认情况下,Bucket聚合是对索引库的所有文档做聚合,我们可以限定要聚合的文档范围,只要添加query条件即可:

GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "lte": 200
      }
    }
  }, 
  "size": 0,
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 10
      }
    }
  }
}
 

aggs代表聚合,与query同级,此时query的作用是?

限定聚合的的文档范围

聚合必须的三要素:

聚合名称 聚合类型 聚合字段

聚合可配置属性有:

size:指定聚合结果数量

order:指定聚合结果排序方式

field:指定聚合字段

Metrics 聚合

例如,我们要求获取每个品牌的用户评分的min、max、avg等值. 我们可以利用stats聚合:

GET /hotel/_search
{
  "size": 0,
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 10
        , "order": {
          "score_state.avg": "asc"
        }
      }
      , "aggs": {
        "score_state": {
          "stats": {
            "field": "score"
          }
        }
      }
    }
  }
}

RestAPI实现聚合

    @Test
    void testAggTerm() throws IOException {
        String name="brandAgg";
        SearchRequest request = new SearchRequest("hotel");
        request.source().size(0);
        request.source().aggregation(
                AggregationBuilders
                .terms(name)
                .field("brand")
                .size(20)
        );
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        Aggregations aggregations = response.getAggregations();
        Terms brandTerms = aggregations.get(name);
        List<? extends Terms.Bucket> buckets = brandTerms.getBuckets();
        for (Terms.Bucket bucket:buckets){
            String key = bucket.getKeyAsString();
            System.out.println(key);
        }
    }

其中包括组装API和结果解析两部分文章来源地址https://www.toymoban.com/news/detail-423574.html

到了这里,关于elasticsearch——数据聚合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据库】通过实例讲清楚,Mongodb的增删查改,分组查询,聚合查询aggregate

    目录 一.基础概念 二.数据库的管理 1.创建数据库 2.删除数据库 二.集合的管理 1.显示所有集合 2.创建集合 3.删除当前集合 4.向集合中插入元素 三.文档的管理 1.文档插入 2.文档的更新 3.文档的删除 4.文档查询 (1)查询基本语法: (2)查询table2集合下的所有文档 (3)查询t

    2024年02月10日
    浏览(41)
  • 大数据Flink(一百零三):SQL 表值聚合函数(Table Aggregate Function)

    文章目录 SQL 表值聚合函数(Table Aggregate Function) Python UDTAF,即 Python TableAggregateFunction。Python UDTAF 用来针对一组数据进行聚合运算,比如同一个 window 下的多条数据、或者同一个 key 下的多条数据等,与 Python UDAF 不同的是,针对同一组输入数据,Python UDTAF 可以产生 0 条、1 条

    2024年02月07日
    浏览(40)
  • 链路聚合(Link Aggregation)

            链路聚合是将物理接口捆绑在一起作为一个逻辑接口来增加带宽和可靠性的方法。将若干条以太链路捆绑在一起形成的逻辑链路,简写为Eth-Trunk。         如图所示,SW1和SW2之间通过三条以太网链路相连,将三条链路加入链路聚合组,就成为了一条Eth-Trunk逻辑链路,

    2024年02月05日
    浏览(45)
  • 【MongoDB】--MongoDB聚合Aggregation

    聚合操作组值来自多个文档,可以对分组数据执行各种操作以返回单个结果。聚合操作包含三类: 单一作用聚合、聚合管道、MapReduce 。 单一作用聚合 :提供对常见聚合过程的简单访问,操作都从单个集合聚合文档 聚合管道操作 :将文档在一个管道处理完毕后,把处理的结

    2024年02月14日
    浏览(39)
  • Kubernetes API Aggregation API聚合

    Kubernetes API Aggregation - Kubernetes - Wiki.Shileizcc.com API 聚合机制 是 Kubernetes 1.7 版本引入的特性, 能够将用户扩展的 API 注册到 kube-apiserver 上, 仍然通过 API Server 的 HTTP URL 对新的 API 进行访问和操作。为了实现这个机制, Kubernetes 在 kube-apiserver 服务中引入了一个 API 聚合层(API

    2024年02月13日
    浏览(41)
  • FlinkSQL聚合函数(Aggregate Function)详解

    使用场景: 聚合函数即 UDAF,常⽤于进多条数据,出⼀条数据的场景。 上图展示了⼀个 聚合函数的例⼦ 以及 聚合函数包含的重要⽅法 。 案例场景: 关于饮料的表,有三个字段,分别是 id、name、price,表⾥有 5 ⾏数据,找到所有饮料⾥最贵的饮料的价格,即执⾏⼀个 max(

    2024年02月04日
    浏览(39)
  • Maven 聚合和继承 Inheritance vs Aggregation

    A Project Object Model or POM is the fundamental unit of work in Maven. It is an XML file that contains information about the project and configuration details used by Maven to build the project. It contains default values for most projects. Examples for this is the build directory, which is  target ; the source directory, which is  src/main/java ; the tes

    2024年02月09日
    浏览(46)
  • elasticsearch-数据聚合

    目录 介绍  实际操作 DSL实现Metrics聚合(嵌套聚合) RestClient实现聚合(以酒店品牌为例) 实现对酒店品牌、城市、星级的过滤 补6.20: (32条消息) Elasticsearch 聚合查询(aggs)_龙源lll的博客-CSDN博客_elasticsearch聚合查询 介绍 聚合: 实现对文档数据的统计、分析以及运算,类似于

    2023年04月09日
    浏览(34)
  • elasticsearch——数据聚合

    聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类: 桶(Bucket)聚合:用来对文档做分组       TermAggregation:按照文档字段值分组        Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组 度量(Metric)聚合:用以计算一

    2023年04月24日
    浏览(32)
  • elasticsearch的数据聚合

    聚合可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近实时搜索效果 聚

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包