2023关于ES中的数据聚合相关操作

news2024/12/24 21:14:16

1.ES数据聚合

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

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

常用的方法

语句描述
TermAggregation按照文档字段值分组
Date Histogram按照日期阶梯分组,列如一周或一月为一组
  • 度量(Metric)聚合:用以计算一些值,比如:最大值、最小值、平均值等

    语句描述
    avg(average)平均值
    Max(maximum)最大值
    Min(minimum)最小值
    Stats(statistics)同时求max、min、avg、sum等
  • 管道(pipeline)聚合:其他聚合的结果为基础做聚合,使用较少

1.总结

什么是聚合

  • 聚合是对文档数据的统计、分析、计算

聚合的常见种类有那些

  • Bucket:对文档数据分组,并统计每组数量
  • Metric:对文档数据做计算,列如avg
  • pipeline:基于其他聚合的结果再做聚合

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

  • keyword
  • 数值
  • 日期
  • 布尔

1.1.DSL实现Bucket聚合

统计所有数据中的酒店品牌有几种。

GET /indexName/_search
{
	"size":0, //设置size为0,结果中不包含hits,只包含aggregations,详细看下图
	"aggs":{ //定义聚合
		"brandAgg":{ //定义聚合的名称
			"terms":{ //聚合的类型,详细信息查看官方文档
				"field":"brand", //参与聚合的字段
				"size":20 //希望获取的聚合结果数量
			}
		}
	}
}

1.1.1.关于size的解释

在这里插入图片描述

当指定了size为0时就只会返回Aggregation作为结果

在这里插入图片描述

​ 注意:指定为0的那个size是和aggs(聚合同级别的),而aggs中的size才是指定显示条数,一般不指定这个size默认值是显示10条(拥有最多文档的那十条,说白了有点结果降序的意思),指定size之后就可以随心所欲的指定返回条数了

GET /indexName/_search
{
	"size":0,
	"aggs":{
		"my_aggs":{
			"terms":{
				"field":"brand",
				"size":1
			}
		}
	}
}

在这里插入图片描述

默认情况下,Bucket集合会同Bucket内的文档数量,记为_count,并且按照指定的值进行排序。

GET /hotel/_search
{
	"size":0,
	"aggs":{
		"my_aggs":{
			"terms":{
				"field":"brand",
				"size":10,
				"order":{
					"_count":"asc" 按照_count升序,或者desc降序,也可以通过_key作为排序对象
				}
			}
		}
	}
}

下图

在这里插入图片描述

当数据量较大时,这时会非常占用内存,需要通过query条件来限定查询。

GET /hotel/_search
{
	"query":{
		"range":{ //范围搜索
			"price":{ //对价格进行搜索
				"lte":200  //less than equal 小于等于200   gle  greater than equal大于等于也可以不加e代表小于或大于
			}
		}
	},
	"size":0,
	"aggs":{
		"my_aggs":{
			"terms":{
				"field":"brand",
				"size":20
			}
		}
	}
}

结果图

在这里插入图片描述

1.1.总结

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

  • 限定聚合的文档范围

聚合必须的三要素

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

聚合可配置属性有:

  • size:指定聚合结果数量
  • order:指定聚合结果排序方式
  • field:指定聚合字段

1.2.实现Metrics聚合

要求获取每个品牌的用户评分的min、max、avg等值

GET /hotel/_search
{
	"size":0,
	"aggs":{
		"my_aggs":{  //聚合名称
			"terms":{ //查询
				"field":"brand",
				"size":20
			},
			"aggs":{  //子聚合
				"scoreAggs":{
					"stats":{
						"field":"score"
					}
				}
			}
		}
	}
}

通过聚合函数中的stats来达到求最小值、最大值、和平均值等

Stats aggregation:一个多值度量聚合,计算从聚合文档中提取的数值的统计信息。

返回值包括min、max、sum、count、avg
在这里插入图片描述

1.3.RestAPI实现聚合

使用Java的RestClient来实现以上ES中的DSL语句,下图所示

在这里插入图片描述

与ES建立连接的两种方式

  • 在启动类中定义以下代码自动注入的RestHighLevelClient,推荐使用,避免重复开发

    @Bean
        public RestHighLevelClient client(){
            return new RestHighLevelClient(RestClient.builder(HttpHost.create("192.168.26.131:9200")));
        }
    
  • 通过在类中设置一个方法建立连接,

    //在类中声明一个成员变量
    private RestHighLevelClient client;
    
    //在每个方法中定义连接的方法
    client=new RestHighLevelClient(RestClient
                    .builder(HttpHost.create("192.168.26.131:9200")));
    

在这里插入图片描述

所有代码

package cn.itcast.hotel;

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.search.aggregations.*;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.util.List;

@SpringBootTest
public class HotelAggregationTest {

//    @Autowired
//    private RestHighLevelClient client;
    private RestHighLevelClient client;

    @BeforeEach
    void startUp(){
        client=new RestHighLevelClient(RestClient
                .builder(HttpHost.create("192.168.26.131:9200")));
    }


    @Test
    void setup() throws IOException {
        //准备请求
        SearchRequest request=new SearchRequest("hotel");
        //DSL语句
        //设置size,返回结果没有hits
        request.source().size(0);
        //聚合
        request.source().aggregation(AggregationBuilders
                .terms("my_aggs")
                .field("brand")
                .size(20)
        );

        //发出请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);

        //解析聚合结果
        Aggregations aggregations = response.getAggregations();
        //根据名称获取聚合结果
        Terms myAggs = aggregations.get("my_aggs");
        //获取桶
        List<? extends Terms.Bucket> buckets = myAggs.getBuckets();
        //遍历
        for (Terms.Bucket bucket : buckets) {
            //获取key,也就是品牌信息
            String brandName = bucket.getKeyAsString();
            long docCount = bucket.getDocCount();
            System.out.println(brandName);
            System.out.println(docCount);
            System.out.println("===================================");

        }















        /*
        GET /hotel/_search
        {
            "size":0;
            "aggs":{
                "my_aggs":{
                    "terms":{
                        "field":"brand",
                        "size":20,
                    }
                }
            }
        }

      */

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/542580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【走进Linux的世界】Linux---基本指令(1)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【Linux专栏】&#x1f388; 本专栏旨在分享学习Linux的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 ls指令pwd指令…

IS420UCSBH4A 用于高速应用中的Mark VIe系列

控制器IS420UCSBH4A由通用电气公司设计&#xff0c;用于高速应用中的Mark VIe系列&#xff0c;采用1066 MHz EP80579英特尔处理器。该控制器可与Mark VIe系列一起用于EX2100e和LS2100e应用。 IS420UCSBH4A技术规格 系列马克维处理机类型1066兆赫EP80579英特尔型号IS420UCSBH4A…

chatgpt赋能Python-python3_8_5怎么打开

Python3.8.5 是如何打开的&#xff1f; Python3.8.5 是近期发布的 Python 编程语言的一个版本&#xff0c;它具有很多新的功能和性能的改进。对于想要学习或者使用 Python3.8.5 的人&#xff0c;本文将介绍如何打开 Python3.8.5 环境。 步骤1&#xff1a;下载 Python3.8.5 首…

chatgpt赋能Python-python3_8怎么用

Python 3.8是什么&#xff1f; Python 3.8是一种编程语言版本&#xff0c;是在2019年10月发布的&#xff0c;它提供了许多新的功能和改进&#xff0c;其中包括优化的性能、新的语法糖&#xff0c;以及一些新的标准库模块&#xff0c;使Python 3.8成为了Python 3.x系列中最受欢…

你可能不需要担心,AI对你的工作造成威胁:万字长文解读科技革命与人类发展

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 上周&#xff0c;AI似乎成为全互联网的焦点了。谷歌在2023IO开发者大会上&#xff0c…

chatgpt赋能Python-python3_8怎么换行

Python是一种高级编程语言&#xff0c;其易用性和简洁语法深受程序员的喜爱。而在Python中&#xff0c;换行是一项必不可少的操作。今天&#xff0c;我们将介绍如何在Python3.8中进行换行&#xff0c;并提供一些有用的技巧。 Python3.8中的换行操作 在Python中&#xff0c;我…

一星期学sql day1

文章目录 了解部分&#xff08;详细部分google一下&#xff09;mysql的下载和安装mysql的启动MySQL的客户端的链接MySQL数据模型sql的通用语法sql 分类DDL&#xff1a;数据定义语言表操作数值类型字符串类型日期时间类型 DML&#xff08;数据操作语言&#xff09;添加数据 了解…

微信小程序 Vue+uniapp电脑手机笔记本预约维修系统 java python

系统具有专门的供用户使用的前台和专门供管理人员使用的后台。 前台用户使用小程序&#xff0c;后台信息处理使用基 MySql进行管理﹔通过后台添加手机信息、管理用户信息、管理预约信息﹔前台用户通过小程序登录&#xff0c;查看维修信息、发起预约。 管理员后端&#xff1b;首…

mysql入门(二)——函数与约束

mysql入门——函数与约束 mysql中的函数字符串函数字符串函数的基本应用 数值函数日期函数流程函数 约束概述约束的演示外键约束建立外键关联&#xff1a;删除外键外键的删除/更新行为为什么要采取外键约束 mysql中的函数 之前我们介绍过聚合函数&#xff0c;在MySQL中&#x…

chatgpt赋能Python-python3_7字体大小调整

Python3.7字体大小调整指南 您是否在使用Python3.7时遇到字体大小问题&#xff1f;本文将为您提供一份全面的Python3.7字体大小调整指南&#xff0c;帮助您轻松解决这一问题。 什么是字体大小问题 字体大小问题指的是当我们在使用Python3.7编辑器时&#xff0c;发现字体太小…

chatgpt赋能Python-python3_8字体大小

Python3.8 字体大小对程序员的重要性 在编写 Python 代码时&#xff0c;设置字体大小可能是最基本的操作之一&#xff0c;特别是对于长期进行编码工作的程序员来说。Python 3.8 为程序员提供了更好的字体调节能力&#xff0c;可以将字体大小设置为适合自己的大小&#xff0c;使…

chatgpt赋能Python-python3_9_4怎么用

介绍 Python是目前最为流行的编程语言之一&#xff0c;用途非常广泛&#xff0c;可以应用于各个领域。Python 3.9.4是Python最新版本&#xff0c;其中包含了很多新功能和改进&#xff0c;让Python编程更加简单和高效。 此文将解释Python 3.9.4的一些主要的功能&#xff0c;以…

JAVA-SE-异常

在JAVA中&#xff0c;将程序执行过程中发生的不正常行为称为异常。简单来说就是我们在运行或编译一段代码时所报的错误。 一&#xff0c;异常的体系结构 在JAVA中不同类型的异常&#xff0c;都有与其对应的类来进行描述。 …

实验三、数据高级查询实验

实验名称&#xff1a;实验3 数据高级查询实验 实验目的和要求&#xff1a; 实验目的和要求 掌握SQL嵌套查询和集合查询等各种高级查询的设计方法等。 实验软硬件要求&#xff1a; 计算机、MySQL,Navicat 实验内容、实验过程、所遇问题及其解决方法 实验内容&#xff1a;针…

Discourse 的用户信息中的 IP 地址显示的是 CloudFlare 的 IP 地址

因为使用了 CloudFlare 的反向地址。 所有 Discourse 获得的用户的 IP 地址其实是 CloudFlare 的服务器地址。 修改 好在 Discourse 已经提供了相关的解决方案。 需要在 Discourse 的配置文件中&#xff0c;添加下面的内容&#xff1a; “templates/cloudflare.template.ym…

分布式系统概念和设计——协调和协定

分布式系统概念和设计 协调和协定 分布式系统中的进程如何协调它们的动作和对共享值达成协议? 算法在分布式系统中的基本目的是&#xff1a;供一组进程来协调它们的动作或对一个或多个值达成协议 避免固定的主-从关系的主要原因是&#xff0c;经常需要系统即使在系统故障的情…

日志文件的轮循(logrotate)

文章目录 日志文件的轮循(logrotate)轮循基本原理轮循的基本配置实际测试logrotate的操作使用案例 自定义日志文件的轮循功能 日志文件的轮循(logrotate) 日志轮循&#xff08;logrotate&#xff09;是一种用于管理日志文件的工具&#xff0c;它可以帮助我们自动地对日志文件进…

EasyRecovery Photo16 for windows数据恢复软件免费版下载安装教程

EasyRecovery Photo16 for windows数据恢复软件免费版下载是一款由Kroll Ontrack公司开发的数据恢复软件&#xff0c;其主要功能是恢复已经删除或损坏的图片文件。该软件可用于恢复各种类型的图片文件&#xff0c;包括JPEG、GIF、BMP、PNG等&#xff0c;同时也支持恢复照片文件…

Thematica: 炫彩主题与黑暗奇观的Vue3之旅

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 一、介绍1.1 博客主题和目的1.2 Vue 3简介二、炫彩主题2.1 准备工作2.2 安装必要依赖2.3 创建Vue项目2.4 设置全局样式

AJax和Axios的讲解

目录 Ajax Ajax基本介绍 同步异步 原生Ajax 原生的Ajax使用方式 Axios 基本介绍 Axios的基本使用 发送 get 请求 发送 post 请求 Axios快速入门 请求方法的别名 练习 Ajax Ajax基本介绍 Ajax: 全称Asynchronous JavaScript And XML&#xff0c;异步的JavaScript和XML…