首页 > 其他分享 >(九):ElasticSearch聚合查询(Aggregation aggs)

(九):ElasticSearch聚合查询(Aggregation aggs)

时间:2024-01-18 17:23:15浏览次数:27  
标签:聚合 Aggregation field ElasticSearch aggs 分组 size

  聚合查询文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/search-aggregations.html

  聚合查询与Mysql中的 group by 类似,可以实现对数据统计、分析。如热点商品、销量等信息。

  ElasticSearch实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现实时搜索效果。

  聚合查询的语法规则:

"aggregations" : {
    "<aggregation_name>" : {
        "<aggregation_type>" : {
            <aggregation_body>
        }
        [,"meta" : {  [<meta_data_body>] } ]?
        [,"aggregations" : { [<sub_aggregation>]+ } ]?
    }
    [,"<aggregation_name_2>" : { ... } ]*
}

1、基本概念

  Elasticsearch中的聚合,包含多种类型,最常用的两种,一个叫 `桶`,一个叫 `度量`:

1.1、bucket - 桶(分组)

  按照某种方式对数据进行分组,每一组数据在ES中称为一个"桶"。如按照年龄段对人进行划分:0~10,10~20,20~30,30~40等。

  Elasticsearch中提供了很多划分桶的方式,这里列举部分划分桶的方式。如:

Date Histogram Aggregation

日期阶梯分组,如给定阶梯为月,会自动每月分为一组

Histogram Aggregation

数值阶梯分组

Terms Aggregation

根据词条内容分组,词条内容完全匹配的为一组

Range Aggregation

数值和日期的范围分组,指定开始和结束,然后按段分组

  bucket aggregations 只负责对数据进行分组,不会进行计算。若要获得统计的数据,bucket中需要嵌套另一种聚合,metrics aggregations 即度量。

1.2、metrich - 度量(运算)

  bucket aggregations分组完成后,会对组中的数据进行聚合运算,例如求平均值、最大、最小、求和等,这些处理在ES中称为 metrich 度量。常见的度量聚合方式:

Avg Aggregation

平均值

Max Aggregation

最大值

Min Aggregation

最小值

Percentiles Aggregation

百分比

Stats Aggregation

同时返回avg、max、min、sum、count等

Sum Aggregation

求和

Top hits Aggregation

求前几

Value Count Aggregation

求总数

2、聚合案例

2.1、搜索address中包含Street的所有人的年龄分布及平均年龄

# 搜索address中包含Street的5个人的年龄分布及平均年龄
GET /items/_search
{
  "query": {
    "match": {
      "address": "Street"
    }
  },
  "aggs": {
    "ageAgg": {
      "terms": {
        "field": "age",
        "size": 3
      }
    },
    "ageAvg":{
      "avg": {
        "field": "age"
      }
    }
  },"size": 0
}

  按照年龄聚合,并计算所有人的年龄分布,聚合时会显示满足条件的记录,size设置为0,就不会显示记录。

0

2.2、搜索各年龄段的平均薪资

# 按 age 聚合,获取各年龄段的平均工资
GET /items/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "ageAgg": {
      "terms": {
        "field": "age",
        "size": 3
      }, 
      "aggs": {
        "balanceAvg": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  },"size": 0
}

2.3、查出所有年龄分布,并且这些年龄段中M的平均薪资和F的平均薪资以及这个年龄段的总体平均薪资

# 查出所有年龄分布,并且这些年龄段中M的平均薪资和F的平均薪资以及这个年龄段的总体平均薪资
GET /items/_search
{
  "query": {
    "match_all": {}
  }, 
  "aggs": {
    "ageAgg": {
      "terms": {
        "field": "age",
        "size": 2
      },
      "aggs": {
        "genderAgg": {
          "terms": {
            "field": "gender.keyword",
            "size": 2
          },
          "aggs": {
            "genderBalanceAvg": {
              "avg": {
                "field": "balance"
              }
            }
          }
        }
        ,"ageBalanceAvg": {
            "avg": {
              "field": "balance"
            }
          }
      }
    }
  }, "size": 0
}

 

标签:聚合,Aggregation,field,ElasticSearch,aggs,分组,size
From: https://www.cnblogs.com/RunningSnails/p/17972959

相关文章

  • (八):ElasticSearch结构化查询 Query DSL
    ElasticSearch提供了一个可以执行的JSON风格的DSL(domain-specificlanguage领域特定语言),被称为QueryDSL。1、准备工作1.1、测试数据下载测试数据下载:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip。测试数据如下:1.2、测试数据导入......
  • (七):ElasticSearch客户端操作
    ElasticSearch服务的客户端,有以下三种方式:·elasticsearch-head插件·elasticsearch提供的Restful接口直接访问·elasticsearch提供的API进行访问1、elasticsearch-head插件启动插件后,访问http://localhost:9100/地址,详情如下:1.1、概览信息概览信息......
  • (五):ElasticSearch基本概念
    1、ElasticSearchElasticsearch是面向文档(documentoriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。Elasticsearc......
  • (二):ElasticSearch安装部署
    1、安装Jdk版本选择:java8、java11、java4,为了兼容Logstash等的兼容性。2、Elasticsearch安装2.1、Elasticsearch下载下载地址:https://www.elastic.co/cn/,点击即刻体验选择下载获取历史版本选择下载Elasticsearch下载指定版本的Elasticsearc......
  • es安装分词插件elasticsearch-analysis-ik(elasticsearch-plugin方式安装)
    环境:OS:Centos7ES:6.8.5 1.查看当前的安装的插件[root@hadoop-slave1soft]#curl-uelastic:123456-XGET"http://192.168.1.63:19200/_cat/plugins?v&s=component&h=name,component,version,description&pretty"namecomponentversiondescription 2.将分......
  • Elasticsearch内核解析 - 数据模型篇【转载】
    原文链接Elasticsearch是一个实时的分布式搜索和分析引擎,它可以帮助我们用很快的速度去处理大规模数据,可以用于全文检索、结构化检索、推荐、分析以及统计聚合等多种场景。Elasticsearch是一个建立在全文搜索引擎库ApacheLucene基础上的分布式搜索引擎,Lucene最早的版本是2......
  • Elasticsearch索引不存在时,查询接口报错怎么办?
    1、索引不存在,报错:type=index_not_found_exception,reason=nosuchindex解决办法:DSL:GET/text_index_003/_search?ignore_unavailable=truejava代码:NativeSearchQuerysearchQuery=newNativeSearchQueryBuilder().withIndicesOptions(IndicesOpti......
  • ElasticSearch中_source、store_fields、doc_values性能比较【转载】
    原文地址请点击在这篇文章中,我想从性能的角度探讨ElasticSearch为我们存储了哪些字段,以及在查询检索时这些字段如何工作。实际上,ElasticSearch和Solr的底层库Lucene提供了两种存储和检索字段的方式:store_fields和doc_values。此外,ElasticSearch默认提供了 _source 字段,这是在......
  • Elastic实战:彻底解决spring-data-elasticsearch日期、时间类型数据读取报错问题
    0.引言在使用spring-data-elasticsearch读取es中时间类型的数据时出现了日期转换报错,不少初学者会在这里困惑很久,所以今天我们专门来解读该问题的几种解决方案。1.问题分析该问题的报错形式一般是:Failedtoconvertfromtype[java.lang.String]totype[java.util.Date]f......
  • Spring Boot3.x集成ElasticSearch8.x
    SpringBoot3.x集成ElasticSearch8.x版本说明,本demo使用SpringBoot3.2.1+JDK17+ElasticSearch8.11.3前提是已经部署好了自己的ElasticSearch环境,我这里直接用容器默认部署好了,能访问即可创建SpringBoot项目导入pom依赖<dependency><grou......