首页 > 其他分享 >ElasticSearch桶、度量

ElasticSearch桶、度量

时间:2022-11-30 00:00:26浏览次数:42  
标签:聚合 分桶 color 分组 文档 度量 ElasticSearch

桶的作用,是按照某种方式对数据进行分组,每一组数据在ES中称为一个桶,例如我们根据国籍对人划分,可以得到中国桶、英国桶、日本桶,或者我们按照年龄段对人进行划分:0-10,10-20,20-30,30-40等

ElasticSearch中提供的划分桶的方式有很多

  • 根据日期阶梯分组,例如给定阶梯为周,会自动每周分为一组
  • 根据数值阶梯分组,与日期类似,需要知道分组的间隔
  • 根据词条内容分组,词条内容完全匹配的为一组,类似数据库group by
  • 数值和日期的范围分组,指定开始和结束,然后按段分组

综上所述,我们发现bucket aggregations只负责对数据进行分组,并不进行,并不进行计算,因此往往bucket中往往会嵌套另一种聚合

 

度量

分组完成之后,我们一般会对组中的数据进行聚合运算,例如求平均值、最大、最小、求和等,这些在ES中称为度量

比较常用的一些度量聚合方式

  • 求平均值
  • 求最大值
  • 求最小值
  • 求百度比
  • 同时返回avg、max、min、sum、count
  • 求和
  • 求前几
  • 求总数

 

聚合为桶

首先,我们按照汽车的颜色 color 来划分桶,按照颜色分桶,最好是使用 term aggregation 类型,按照颜色的名称来分桶

GET /car/_search
{
  "size": 0, // 不需要展示文档数据
  "aggs": { // 聚合分桶
    "popular_colors": { // 自定义分桶的名称
      "terms": { // 根据词条分桶
        "field": "color"
      }
    }
  }
}
  • size:查询条数,这里设置为0,因为我们不关心搜索到的数据,只关心聚合结果,提高效率
  • aggs:声明这是一个聚合查询,是 aggregations 的缩写
  • popular_colors:给这次聚合起一个名字,可任意指定
  • terms:聚合的类型,这里选择 terms,是根据词条内容(这里是颜色)划分
  • field:划分桶时依赖的字段

 

  • hits:查询结果为空,因为我们设置了 size 为0
  • aggregations:聚合的结果
  • popular_colors:我们定义的聚合名称
  • buckets:查找到的桶,每个不同的 color 字段值都会形成一个桶
  • key:这个桶对应的 color 字段的值
  • doc_count:这个桶中的文档数量

通过聚合的结果我们发现,目前红色的小车比较畅销!

 桶内度量

前面的例子告诉我们每个桶里面的文档数量,这很有用。但通常,我们的应用需要提供更复杂的文档度量。例如,每种颜色汽车的平均价格是多少?

因此,我们需要告诉 ElasticSearch 使用哪个字段,使用何种度量方式进行运算,这些信息要嵌套在桶内,度量的运算会基于桶内的文档进行

现在,我们为刚刚的聚合结果添加求价格平均值的度量

GET /car/_search
{
  "size": 0, // 不需要展示文档数据
  "aggs": { // 聚合分桶
    "popular_colors": { // 自定义分桶的名称
      "terms": { // 根据词条分桶
        "field": "color"
      },
      "aggs": { // 进一步分桶,统计桶内的数据信息
        "avg_price": { // 自定义度量名称
          "avg": { // 度量方式
            "field": "price"
          }
        }
      }
    }
  }
}

  

标签:聚合,分桶,color,分组,文档,度量,ElasticSearch
From: https://www.cnblogs.com/xulinjun/p/16937150.html

相关文章

  • ES:ElasticSearch-概述(一)
     ElasticSewrch(ES)与solr一样也是一个基于lucene的搜索服务器,它基于RESTfulweb接口,相对于solr,它更适合于海量级的搜索,同时ES的实时性比solr要好,延迟最多1秒,另外它的可扩展性......
  • Linux(CentOS) Docker 部署Logstash (sqlserver 同步到Elasticsearch)
    网上搜了一下基本都是mysql同步到elasticsearch的案例,虽然没有Sqlserver得案例,但是想一下步骤也大致相同。1.拉取镜像使用以下命令拉去与elasticsearch版本一致logstas......
  • PHP 如何使用 Elasticsearch 的 索引别名 API 接口
    实战场景​如何在PHP中使用Elasticsearch的索引别名API接口知识点PHPElasticsearch索引index索引别名indexalias索引别名是给一个或者多个索引定义另外一个名称,使......
  • Elasticsearch索引数据大批量删除接口优化
    Elaticsearch索引数据大批量删除接口优化​​一、需求​​​​二、索引数据删除接口​​​​2.1使用到的elasticsearch核心接口​​​​2.2封装删除脚本​​​​2.3封装接口......
  • elasticsearch基础(三)
    1.数据聚合聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的......
  • 机器学习基础(5)—— 模型选择之性能度量
    参考:西瓜书第二章​之前的文章​​介绍了多种模型选择的概念,其关键是设计一个对比各个方法所得模型及其模型参数的规范流程,并利用它从假设空间中选出泛化能力最强的模型,形式......
  • 微服务之分布式搜索引擎elasticsearch
    什么是elasticsearchelasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。elasticsearch结合kibana、Logstash、Beats,也就是elastic......
  • elasticsearch批量导入json数据
     json 数据集的内容以行作为分割,不要添加除换行以外的空格每两行作为一条文档,第一行的_index指明索引,_id指明该条文档的id;第二行为具体的数据内容; 不管下面哪种方......
  • docker搭建Elasticsearch、Kibana、Logstash 同步mysql数据到ES
    一、前言在数据量大的企业级实践中,Elasticsearch显得非常常见,特别是数据表超过千万级后,无论怎么优化,还是有点力不从心!使用中,最首先的问题就是怎么把千万级数据同步到Elasti......
  • elasticsearch模糊查询match match_phrase wildcard regexp prefix的区别
    1.match查询会先对搜索词进行分词,比如“白雪公主和苹果”,会分成“白雪”“公主”“苹果”。含有相关内容的字段,都会被检索出来。2.match_phrase查询match_phrase与slop一起......