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

es-06聚合查询

聚合查询

  1. 概念

    聚合(aggs)不同于普通查询,是目前学到的第二种大的查询分类,第一种即“query”,因此在代码中的第一层嵌套由“query”变为了“aggs”。用于进行聚合的字段必须是exact value,分词字段不可进行聚合,对于text字段如果需要使用聚合,需要开启fielddata,但是通常不建议,因为fielddata是将聚合使用的数据结构由磁盘(doc_values)变为了堆内存(field_data),大数据的聚合操作很容易导致OOM,详细原理会在进阶篇中阐述。

  2. 聚合分类

    1. 分桶聚合(Bucket agregations):类比SQL中的group by的作用,主要用于统计不同类型数据的数量
    2. 指标聚合(Metrics agregations):主要用于最大值、最小值、平均值、字段之和等指标的统计
    3. 管道聚合(Pipeline agregations):用于对聚合的结果进行二次聚合,如要统计绑定数量最多的标签bucket,就是要先按照标签进行分桶,再在分桶的结果上计算最大值。
  3. 语法

    GET product/_search
    {"aggs": {"<aggs_name>": {"<agg_type>": {"field": "<field_name>"}}}
    }
    

    aggs_name:聚合函数的名称

    agg_type:聚合种类,比如是桶聚合(terms)或者是指标聚合(avg、sum、min、max等)

    field_name:字段名称或者叫域名。

  4. 桶聚合:

    场景:用于统计不同种类的文档的数量,可进行嵌套统计。

    函数:terms

    注意:聚合字段必须是exact value,如keyword

  5. 指标聚合

    场景:用于统计某个指标,如最大值、最小值、平均值,可以结合桶聚合一起使用,如按照商品类型分桶,统计每个桶的平均价格。

    函数:平均值:Avg、最大值:Max、最小值:Min、求和:Sum、详细信息:Stats、数量:Value count

  6. 管道聚合

    场景:用于对聚合查询的二次聚合,如统计平均价格最低的商品分类,即先按照商品分类进行桶聚合,并计算其平均价格,然后对其平均价格计算最小值聚合

    函数:Min bucket:最小桶、Max bucket:最大桶、Avg bucket:桶平均值、Sum bucket:桶求和、Stats bucket:桶信息

    注意:buckets_path为管道聚合的关键字,其值从当前聚合统计的聚合函数开始计算为第一级。比如下面例子中,my_aggs和my_min_bucket同级, my_aggs就是buckets_path值的起始值。

    GET product/_search
    {"size": 0, "aggs": {"my_aggs": {"terms": {...},"aggs": {"my_price_bucket": {...}}},"my_min_bucket":{"min_bucket": {"buckets_path": "my_aggs>price_bucket"}}}
    }
    
  7. 嵌套聚合

    语法:

    GET product/_search
    {"size": 0,"aggs": {"<agg_name>": {"<agg_type>": {"field": "<field_name>"},"aggs": {"<agg_name_child>": {"<agg_type>": {"field": "<field_name>"}}}}}
    }
    

    用途:用于在某种聚合的计算结果之上再次聚合,如统计不同类型商品的平均价格,就是在按照商品类型桶聚合之后,在其结果之上计算平均价格

  8. 聚合和查询的相互关系

    1. 基于query或filter的聚合

      语法:

      GET product/_search
      {"query": {...}, "aggs": {...}
      }
      

      注意:以上语法,执行顺序为先query后aggs,顺序和谁在上谁在下没有关系。query中可以是查询、也可以是filter、或者bool query

    2. 基于聚合结果的查询、

      GET product/_search
      {"aggs": {...},"post_filter": {...}
      }
      

      注意:以上语法,执行顺序为先aggs后post_filter,顺序和谁在上谁在下没有关系。

    3. 查询条件的作用域

      GET product/_search
      {"size": 10,"query": {...},"aggs": {"avg_price": {...},"all_avg_price": {"global": {},"aggs": {...}}}
      }
      

      上面例子中,avg_price的计算结果是基于query的查询结果的,而all_avg_price的聚合是基于all data的

  9. 聚合排序

    1. 排序规则:

      order_type:_count(数量) _key(聚合结果的key值) _term(废弃但是仍然可用,使用_key代替)

      GET product/_search
      {"aggs": {"type_agg": {"terms": {"field": "tags","order": {"<order_type>": "desc"},"size": 10}}}
      }
      
    2. 多级排序:即排序的优先级,按照外层优先的顺序

      GET product/_search?size=0
      {"aggs": {"first_sort": {..."aggs": {"second_sort": {...}}}}
      }
      

      上例中,先按照first_sort排序,再按照second_sort排序

    3. 多层排序:即按照多层聚合中的里层某个聚合的结果进行排序

      GET product/_search
      {"size": 0,"aggs": {"tag_avg_price": {"terms": {"field": "type.keyword","order": {"agg_stats>my_stats.sum": "desc"}},"aggs": {"agg_stats": {..."aggs": {"my_stats": {"extended_stats": {...}}}}}}}
      }
      

      上例中,按照里层聚合“my_stats”进行排序

  10. 常用的查询函数

    1. histogram:直方图或柱状图统计

      用途:用于区间统计,如不同价格商品区间的销售情况

      语法:

      GET product/_search?size=0
      {"aggs": {"<histogram_name>": {"histogram": {"field": "price", 				#字段名称"interval": 1000,					#区间间隔"keyed": true,						#返回数据的结构化类型"min_doc_count": <num>,		#返回桶的最小文档数阈值,即文档数小于num的桶不会被输出"missing": 1999						#空值的替换值,即如果文档对应字段的值为空,则默认输出1999(参数值)}}}
      }
      
    2. date-histogram:基于日期的直方图,比如统计一年每个月的销售额

      语法:

      GET product/_search?size=0
      {"aggs": {"my_date_histogram": {"date_histogram": {"field": "createtime",					#字段需为date类型"<interval_type>": "month",			#时间间隔的参数可选项"format": "yyyy-MM", 						#日期的格式化输出"extended_bounds": {						#输出空桶"min": "2020-01","max": "2020-12"}}}}
      }
      

      interval_type:时间间隔的参数可选项

      ​ fixed_interval:ms(毫秒)、s(秒)、 m(分钟)、h(小时)、d(天),注意单位需要带上具体的数值,如2d为两天。需要当心当单位过小,会 导致输出桶过多而导致服务崩溃。

      ​ calendar_interval:month、year

      ​ interval:(废弃,但是仍然可用)

    3. percentile 百分位统计 或者 饼状图

      计算结果为何为近似值。

      1. percentiles:用于评估当前数值分布情况,比如99 percentile 是 1000 , 是指 99%的数值都在1000以内。常见的一个场景就是我们制定 SLA 的时候常说 99% 的请求延迟都在100ms 以内,这个时候你就可以用 99 percentile 来查一下,看一下 99 percenttile 的值如果在 100ms 以内,就代表SLA达标了。

        语法:

        GET product/_search?size=0
        {"aggs": {"<percentiles_name>": {"percentiles": {"field": "price","percents": [percent1,				#区间的数值,如510305099 即代表5%10%30%50%99%的数值分布percent2,...]}}}
        }
        
      2. percentile_ranks: percentile rank 其实就是percentiles的反向查询,比如我想看一下 1000、3000 在当前数值中处于哪一个范围内,你查一下它的 rank,发现是95,99,那么说明有95%的数值都在1000以内,99%的数值都在3000以内。

        GET product/_search?size=0
        {"aggs": {"<percentiles_name>": {"percentile_ranks": {"field": "<field_value>","values": [rank1,rank2,...]}}}
        }
        

示例

# 聚合查询
DELETE product
## 数据
PUT product
{"mappings" : {"properties" : {"createtime" : {"type" : "date"},"date" : {"type" : "date"},"desc" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}},"analyzer":"ik_max_word"},"lv" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"name" : {"type" : "text","analyzer":"ik_max_word","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"price" : {"type" : "long"},"tags" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"type" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}}}}
}
PUT /product/_doc/1
{"name" : "小米手机","desc" :  "手机中的战斗机","price" :  3999,"lv":"旗舰机","type":"手机","createtime":"2020-10-01T08:00:00Z","tags": [ "性价比", "发烧", "不卡顿" ]
}
PUT /product/_doc/2
{"name" : "小米NFC手机","desc" :  "支持全功能NFC,手机中的滑翔机","price" :  4999,"lv":"旗舰机","type":"手机","createtime":"2020-05-21T08:00:00Z","tags": [ "性价比", "发烧", "公交卡" ]
}
PUT /product/_doc/3
{"name" : "NFC手机","desc" :  "手机中的轰炸机","price" :  2999,"lv":"高端机","type":"手机","createtime":"2020-06-20","tags": [ "性价比", "快充", "门禁卡" ]
}
PUT /product/_doc/4
{"name" : "小米耳机","desc" :  "耳机中的黄焖鸡","price" :  999,"lv":"百元机","type":"耳机","createtime":"2020-06-23","tags": [ "降噪", "防水", "蓝牙" ]
}
PUT /product/_doc/5
{"name" : "红米耳机","desc" :  "耳机中的肯德基","price" :  399,"type":"耳机","lv":"百元机","createtime":"2020-07-20","tags": [ "防火", "低音炮", "听声辨位" ]
}
PUT /product/_doc/6
{"name" : "小米手机10","desc" :  "充电贼快掉电更快,超级无敌望远镜,高刷电竞屏","price" :  "","lv":"旗舰机","type":"手机","createtime":"2020-07-27","tags": [ "120HZ刷新率", "120W快充", "120倍变焦" ]
}
PUT /product/_doc/7
{"name" : "挨炮 SE2","desc" :  "除了CPU,一无是处","price" :  "3299","lv":"旗舰机","type":"手机","createtime":"2020-07-21","tags": [ "割韭菜", "割韭菜", "割新韭菜" ]
}
PUT /product/_doc/8
{"name" : "XS Max","desc" :  "听说要出新款12手机了,终于可以换掉手中的4S了","price" :  4399,"lv":"旗舰机","type":"手机","createtime":"2020-08-19","tags": [ "5V1A", "4G全网通", "大" ]
}
PUT /product/_doc/9
{"name" : "小米电视","desc" :  "70寸性价比只选,不要一万八,要不要八千八,只要两千九百九十八","price" :  2998,"lv":"高端机","type":"耳机","createtime":"2020-08-16","tags": [ "巨馍", "家庭影院", "游戏" ]
}
PUT /product/_doc/10
{"name" : "红米电视","desc" :  "我比上边那个更划算,我也2998,我也70寸,但是我更好看","price" :  2999,"type":"电视","lv":"高端机","createtime":"2020-08-28","tags": [ "大片", "蓝光8K", "超薄" ]
}
PUT /product/_doc/11
{"name": "红米电视","desc": "我比上边那个更划算,我也2998,我也70寸,但是我更好看","price": 2998,"type": "电视","lv": "高端机","createtime": "2020-08-28","tags": ["大片","蓝光8K","超薄"]
}
## 语法
GET product/_search
{"aggs": {"<aggs_name>": {"<agg_type>": {"field": "<field_name>"}}}
}
## 桶聚合 例:统计不同标签的商品数量
GET product/_search
{"aggs": {"tag_bucket": {"terms": {"field": "tags.keyword"}}}
}
## 不显示hits数据:size:0
GET product/_search
{"size": 0, "aggs": {"tag_bucket": {"terms": {"field": "tags.keyword"}}}
}
## 排序
GET product/_search
{"size": 0, "aggs": {"tag_bucket": {"terms": {"field": "tags.keyword","size": 3,"order": {"_count": "desc"}}}}
}## doc_values和field_data
GET product/_search
{"size": 0, "aggs": {"tag_bucket": {"terms": {"field": "name"}}}
}
GET product/_search
{"size": 0, "aggs": {"tag_bucket": {"terms": {"field": "name.keyword"}}}
}
POST product/_mapping
{"properties": {"name": {"type": "text","analyzer": "ik_max_word","fielddata": true}}
}
GET product/_search
{"size": 0,"aggs": {"tag_bucket": {"terms": {"size": 20,"field": "name"}}}
}#*****************************************
## 指标聚合 
## 例:最贵、最便宜和平均价格三个指标
GET product/_search
{"size": 0, "aggs": {"max_price": {"max": {"field": "price"}},"min_price": {"min": {"field": "price"}},"avg_price": {"avg": {"field": "price"}}}
}
## 单个聚合查询所有指标
GET product/_search
{"size": 0, "aggs": {"price_stats": {"stats": {"field": "price"}}}
}
##按照name去重的数量
GET product/_search
{"size": 0, "aggs": {"type_count": {"cardinality": {"field": "name"}}}
}
GET product/_search
{"size": 0, "aggs": {"type_count": {"cardinality": {"field": "name.keyword"}}}
}
##对type计算去重后数量
GET product/_search
{"size": 0, "aggs": {"type_count": {"cardinality": {"field": "lv.keyword"}}}
}
##*********************************************
## 管道聚合 二次聚合
## 例:统计平均价格最低的商品分类
GET product/_search
{"size": 0, "aggs": {"type_bucket": {"terms": {"field": "type.keyword"},"aggs": {"price_bucket": {"avg": {"field": "price"}}}},"min_bucket":{"min_bucket": {"buckets_path": "type_bucket>price_bucket"}}}
}##=============================================
## 嵌套聚合
## 语法
GET product/_search
{"size": 0,"aggs": {"<agg_name>": {"<agg_type>": {"field": "<field_name>"},"aggs": {"<agg_name_child>": {"<agg_type>": {"field": "<field_name>"}}}}}
}
# 例:统计不同类型商品的不同级别的数量
GET product/_search
{"size": 0, "aggs": {"type_lv": {"terms": {"field": "type.keyword"},"aggs": {"lv": {"terms": {"field": "lv.keyword"}}}}}
}
#按照lv分桶 输出每个桶的具体价格信息
GET product/_search
{"size": 0, "aggs": {"lv_price": {"terms": {"field": "lv.keyword"},"aggs": {"price": {"stats": {"field": "price"}}}}}
}##结合了上面两个例子
##统计不同类型商品 不同档次的 价格信息 标签信息
GET product/_search
{"size": 0, "aggs": {"type_agg": {"terms": {"field": "type.keyword"},"aggs": {"lv_agg": {"terms": {"field": "lv.keyword"},"aggs": {"price_stats": {"stats": {"field": "price"}},"tags_buckets": {"terms": {"field": "tags.keyword"}}}}}}}
}## 统计每个商品类型中 不同档次分类商品中 平均价格最低的档次
GET product/_search
{"size": 0,"aggs": {"type_bucket": {"terms": {"field": "type.keyword"},"aggs": {"lv_bucket": {"terms": {"field": "lv.keyword"},"aggs": {"price_avg": {"avg": {"field": "price"}}}},"min_bucket": {"min_bucket": {"buckets_path": "lv_bucket>price_avg"}}}}}
}#======================================================
#基于查询结果的聚合
GET product/_search
{"size": 0, "query": {"range": {"price": {"gte": 5000}}}, "aggs": {"tags_bucket": {"terms": {"field": "tags.keyword"}}}
}#基于filter的aggs
GET product/_search
{"query": {"constant_score": {"filter": {"range": {"price": {"gte": 5000}}}}},"aggs": {"tags_bucket": {"terms": {"field": "tags.keyword"}}} 
}GET product/_search
{"query": {"bool": {"filter": {"range": {"price": {"gte": 5000}}}}}, "aggs": {"tags_bucket": {"terms": {"field": "tags.keyword"}}}
}#基于聚合的查询
GET product/_search
{"aggs": {"tags_bucket": {"terms": {"field": "tags.keyword"}}},"post_filter": {"term": {"tags.keyword": "性价比"}}
}#取消查询条件&&查询条件嵌套
## 例:最贵、最便宜和平均价格三个指标
GET product/_search
{"size": 10,"query": {"range": {"price": {"gte": 4000}}},"aggs": {"max_price": {"max": {"field": "price"}},"min_price": {"min": {"field": "price"}},"avg_price": {"avg": {"field": "price"}},"all_avg_price": {"global": {},"aggs": {"avg_price": {"avg": {"field": "price"}}}},"muti_avg_price": {"filter": {"range": {"price": {"lte": 4500}}}, "aggs": {"avg_price": {"avg": {"field": "price"}}}}}
}#===============================================
#聚合排序_count _key _term
GET product/_search
{"size": 0,"aggs": {"type_agg": {"terms": {"field": "tags","order": {"_count": "desc"},"size": 10}}}
}
#多级排序
GET product/_search?size=0
{"aggs": {"first_sort": {"terms": {"field": "type.keyword","order": {"_count": "desc"}},"aggs": {"second_sort": {"terms": {"field": "lv.keyword","order": {"_count": "asc"}}}}}}
}#多层排序
GET product/_search
{"size": 0,"aggs": {"tag_avg_price": {"terms": {"field": "type.keyword","order": {"agg_stats>stats.sum": "desc"}},"aggs": {"agg_stats": {"filter": {"terms": {"type.keyword": ["耳机","手机","电视"]}},"aggs": {"stats": {"extended_stats": {"field": "price"}}}}}}}
}#===========================================================
# 常用的查询函数
## histogram 直方图 或者 柱状图 
GET product/_search
{"aggs": {"price_range": {"range": {"field": "price","ranges": [{"from": 0,"to": 1000},{"from": 1000,"to": 2000},{"from": 3000,"to": 4000},{"from": 4000,"to": 5000}]}}}
}
GET product/_search?size=0
{"aggs": {"price_range": {"range": {"field": "createtime","ranges": [{"from": "2020-05-01", "to": "2020-05-31"},{"from": "2020-06-01","to": "2020-06-30"},{"from": "2020-07-01","to": "2020-07-31"},{"from": "2020-08-01"}]}}}
}
#空值的处理逻辑 对字段的空值赋予默认值
GET product/_search?size=0
{"aggs": {"price_histogram": {"histogram": {"field": "price","interval": 1000,"keyed": true,"min_doc_count": 0,"missing": 1999}}}
}
#date-histogram
#ms s m h d
GET product/_search?size=0
{"aggs": {"my_date_histogram": {"date_histogram": {"field": "createtime","calendar_interval": "month","min_doc_count": 0,"format": "yyyy-MM", "extended_bounds": {"min": "2020-01","max": "2020-12"},"order": {"_count": "desc"}}}}
}
GET product/_search?size=0
{"aggs": {"my_auto_histogram": {"auto_date_histogram": {"field": "createtime","format": "yyyy-MM-dd","buckets": 180}}}
}
#cumulative_sum
GET product/_search?size=0
{"aggs": {"my_date_histogram": {"date_histogram": {"field": "createtime","calendar_interval": "month","min_doc_count": 0,"format": "yyyy-MM", "extended_bounds": {"min": "2020-01","max": "2020-12"}},"aggs": {"sum_agg": {"sum": {"field": "price"}},"my_cumulative_sum":{"cumulative_sum": {"buckets_path": "sum_agg"}}}}}
}
## percentile 百分位统计 或者 饼状图
## https://www.elastic.co/guide/en/elasticsearch/reference/7.10/search-aggregations-metrics-percentile-aggregation.htmlGET product/_search?size=0
{"aggs": {"price_percentiles": {"percentiles": {"field": "price","percents": [1,5,25,50,75,95,99]}}}
}
#percentile_ranks
#TDigest
GET product/_search?size=0
{"aggs": {"price_percentiles": {"percentile_ranks": {"field": "price","values": [1000,2000,3000,4000,5000,6000]}}}
}

相关文章:

es-06聚合查询

聚合查询 概念 聚合&#xff08;aggs&#xff09;不同于普通查询&#xff0c;是目前学到的第二种大的查询分类&#xff0c;第一种即“query”&#xff0c;因此在代码中的第一层嵌套由“query”变为了“aggs”。用于进行聚合的字段必须是exact value&#xff0c;分词字段不可进行…...

面试知识点准备与总结——(并发篇)

目录线程有哪些状态线程池的核心参数sleep和wait的区别lock 与 synchronized 的异同volatile能否保证线程安全悲观锁和乐观锁的区别Hashtable 与 ConcurrentHashMap 的区别ConcurrentHashMap1.7和1.8的区别ThreadLocal的理解ThreadLocalMap中的key为何要设置为弱引用线程有哪些…...

Django框架之模型视图-URLconf

URLconf 浏览者通过在浏览器的地址栏中输入网址请求网站对于Django开发的网站&#xff0c;由哪一个视图进行处理请求&#xff0c;是由url匹配找到的 配置URLconf 1.settings.py中 指定url配置 ROOT_URLCONF 项目.urls2.项目中urls.py 匹配成功后&#xff0c;包含到应用的urls…...

操作系统闲谈06——进程管理

操作系统闲谈06——进程管理 一、进程调度 01 时间片轮转 给每一个进程分配一个时间片&#xff0c;然后时间片用完了&#xff0c;把cpu分配给另一个进程 时间片通常设置为 20ms ~ 50ms 02 先来先服务 就是维护了一个就绪队列&#xff0c;每次选择最先进入队列的进程&#…...

DaVinci 偏好设置:用户 - UI 设置

偏好设置 - 用户/ UI 设置Preferences - User/ UI Settings工作区选项Workspace Options语言Language指定 DaVinci Resolve 软件界面所使用的语言。目前支持英语、简体中文、日语、西班牙语、葡萄牙语、法语、俄语、泰语和越南语等等。启动时重新加载上一个工作项目Reload last…...

Nacos超简单-管理配置文件

优点理论什么的就不说了&#xff0c;按照流程开始配配置吧。登录Centos&#xff0c;启动Naocs&#xff0c;使用sh /data/soft/restart.sh将自动启动Nacos。访问&#xff1a;http://192.168.101.65:8848/nacos/账号密码&#xff1a;nacos/nacos分为两部分&#xff0c;第一部分准…...

基于微信小程序的中国各地美食推荐平台小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.…...

如何优雅的导出函数

在开发过程中&#xff0c;经常会引用外部函数。方法主要有两种&#xff1a; 方法一&#xff1a;包含头文件并制定lib位置 优点&#xff1a;使用简单缺点&#xff1a;lib和vs版本有关&#xff0c;不同的版本和编译模式可能导致编译失败 方法二&#xff1a;GetProcAddress 优…...

c++多重继承

1.概论多重继承是否有必要吗&#xff1f;这个问题显然是一个哲学问题&#xff0c;正确的解答方式是根据情况来看&#xff0c;有时候需要&#xff0c;有时候不需要&#xff0c;这显然是一句废话&#xff0c;有点像上马克思主义哲学或者中庸思。但是这个问题和那些思想一样&#…...

15_FreeRtos计数信号量优先级翻转互斥信号量

目录 计数型信号量 计数型信号量相关API函数 计数型信号量实验源码 优先级翻转简介 优先级翻转实验源码 互斥信号量 互斥信号量相关API函数 互斥信号量实验源码 计数型信号量 计数型信号量相当于队列长度大于1的队列&#xff0c;因此计数型信号量能够容纳多个资源,这在…...

二叉树(一)

二叉树&#xff08;一&#xff09;1.树的概念2.树的相关概念3.树的表示4.树在实际中的运用5.二叉树概念及结构6.特殊的二叉树7.二叉树的性质&#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列专栏…...

【SCL】1200案例:天塔之光数码管显示液体混合水塔水位

使用scl编写天塔之光&数码管显示&液体混合&水塔水位 文章目录 目录 文章目录 前言 一、案例1&#xff1a;天塔之光 1.控制要求 2.编写程序 3.效果 二、案例2&#xff1a;液体混合 1.控制要求 2.编写程序 三、案例3&#xff1a;数码管显示 1.控制要求 2.编写程序 3…...

5.1配置IBGP和EBGP

5.2.1实验1&#xff1a;配置IBGP和EBGP 实验目的 熟悉IBGP和EBGP的应用场景掌握IBGP和EBGP的配置方法 实验拓扑 实验拓扑如图5-1所示&#xff1a; 图5-1&#xff1a;配置IBGP和EBGP 实验步骤 IP地址的配置 R1的配置 <Huawei>system-view Enter system view, return …...

c++中超级详细的一些知识,新手快来

目录 2.文章内容简介 3.理解虚函数表 3.1.多态与虚表 3.2.使用指针访问虚表 4.对象模型概述 4.1.简单对象模型 4.2.表格驱动模型 4.3.非继承下的C对象模型 5.继承下的C对象模型 5.1.单继承 5.2.多继承 5.2.1一般的多重继承&#xff08;非菱形继承&#xff09; 5.2…...

[答疑]经营困难时期谈建模和伪创新-长点心和长点良心

leonll 2022-11-26 9:53 我们今年真是太难了……&#xff08;此处删除若干字&#xff09;……去年底就想着邀请您来给我们讲课&#xff0c;现在也没有实行。我想再和我们老大提&#xff0c;您觉得怎么说个关键理由&#xff0c;这样的形势合适引进UML开发流程&#xff1f; UML…...

计算机基础知识

计算机网络的拓扑结构 一、OSI 7层网络模型是指什么&#xff1f; 7层分别是什么&#xff1f;每层的作用是什么&#xff1f; OSI7层模型是 国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系。 每层功能:&#xff08;自底向上&#xff09; 物理层:建立、…...

Java爬虫—WebMagic

一&#xff0c;WebMagic介绍WebMagic企业开发&#xff0c;比HttpClient和JSoup更方便一&#xff09;&#xff0c;WebMagic架构介绍WebMagic有DownLoad&#xff0c;PageProcessor&#xff0c;Schedule&#xff0c;Pipeline四大组件&#xff0c;并有Spider将他们组织起来&#xf…...

[软件工程导论(第六版)]第2章 可行性研究(复习笔记)

文章目录2.1 可行性研究的任务2.2 可行性研究过程2.3 系统流程图2.4 数据流图概念2.5 数据字典2.6 成本/效益分析2.1 可行性研究的任务 可行性研究的目的 用最小的代价在尽可能短的时间内确定问题是否能够解决。 可行性研究的3个方面 &#xff08;1&#xff09;技术可行性&…...

Mac下安装Tomcat以及IDEA中的配置

安装brew 打开终端输入以下命令&#xff1a; /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 搜索tomcat版本&#xff0c;输入以下命令&#xff1a; brew search tomcat 安装自己想要的版本&#xff0c;例…...

【Linux详解】——文件基础(I/O、文件描述符、重定向、缓冲区)

&#x1f4d6; 前言&#xff1a;本期介绍文件基础I/O。 目录&#x1f552; 1. 文件回顾&#x1f558; 1.1 基本概念&#x1f558; 1.2 C语言文件操作&#x1f564; 1.2.1 概述&#x1f564; 1.2.2 实操&#x1f564; 1.2.3 OS接口open的使用&#xff08;比特位标记&#xff09;…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...