当前位置: 首页 > 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;…...

HomMat2d

1.affine_trans_region&#xff08;区域的任意变换&#xff09; 2.hom_mat2d_identity&#xff08;创建二位变换矩阵&#xff09; 3.hom_mat2d_translate&#xff08;平移&#xff09; 4.hom_mat2d_scale&#xff08;缩放&#xff09; 5.hom_mat2d_rotate&#xff08;旋转 &…...

Python3 JSON 数据解析

Python3 JSON 数据解析 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码&#xff0c;它包含了两个函数&#xff1a; json.dumps(): 对数据进行编码。json.loads(): 对数据进行解码。 在 json 的编解码…...

Homebrew 安装遇到的问题

Homebrew 安装遇到的问题 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录Homebrew 安装遇到的问题前言一、安装二、遇到的问题1.提示 zsh: command not found: brew三、解决问题前言 使用 Homebrew 能够 安装 Apple&#xff08;或您的 Linux 系统&#…...

Metasploit框架基础(二)

文章目录前言一、Meatsplooit的架构二、目录结构datadocumentationlibmodulesplugins三、Measploit模块四、Metasploit的使用前言 Metasploit是用ruby语言开发的&#xff0c;所以你打开软件目录&#xff0c;会发现很多.rb结尾的文件。ruby是一门OOP的语言。 一、Meatsplooit的…...

c++容器

1、vector容器 1.1性质 a&#xff09;该容器的数据结构和数组相似&#xff0c;被称为单端数组。 b&#xff09;在存储数据时不是在原有空间上往后拓展&#xff0c;而是找到一个新的空间&#xff0c;将原数据深拷贝到新空间&#xff0c;释放原空间。该过程被称为动态拓展。 vec…...

Vue.js如何实现对一千张图片进行分页加载?

目录 vue处理一千张图片进行分页加载 分页加载、懒加载---概念介绍&#xff1a; 思路&#xff1a; 开发过程中&#xff0c;如果后端一次性返回你1000多条图片或数据&#xff0c;那我们前端应该怎么用什么思路去更好的渲染呢&#xff1f; 第一种&#xff1a;我们可以使用分页…...

计算机网络复习(六)

考点&#xff1a;MIME及其编码&#xff08;base64,quoted-printable)网络协议http是基于什么协议&#xff0c;应用层到网络层基于什么协议6-27.试将数据 11001100 10000001 00111000 进行 base64 编码&#xff0c;并得到最后传输的 ASCII 数据。答&#xff1a;先将 24 比特的二…...

Redis进阶:布隆过滤器(Bloom Filter)及误判率数学推导

1 缘起 有一次偶然间听到有同事在说某个项目中使用了布隆过滤器&#xff0c; 哎呦&#xff0c;我去&#xff0c;我竟然不知道啥是布隆过滤器&#xff0c; 这我哪能忍&#xff1f;其实&#xff0c;也可以忍&#xff0c;但是&#xff0c;可能有的面试官不能忍&#xff01;&#…...

Java创建对象的方式

Java创建对象的五种方式&#xff1a; &#xff08;1&#xff09;使用new关键字 &#xff08;2&#xff09;使用Object类的clone方法 &#xff08;3&#xff09;使用Class类的newInstance方法 &#xff08;4&#xff09;使用Constructor类中的newInstance方法 &#xff08;5&am…...

dom基本操作

1、style修改样式 基本语法&#xff1a; 元素.style.样式’值‘ 注意: 1.修改样式通过style属性引出 2.如果属性有-连接符&#xff0c;需要转换为小驼峰命名法 3.赋值的时候&#xff0c;需要的时候不要忘记加css单位 4.后面的值必须是字符串 <div></div> // 1、…...

有哪些做的比较好的网站/成都网站推广哪家专业

我正在使用php创建一个xml文件.生成的XML是.PeterVJohnMale但是如果值为null,则生成的xml是(查看节点插入).PeterJohnMale如果值为null,我希望创建xml以使其生成.PeterJohnMale这是我的代码.$doc new DOMDocument(1.0);$doc->formatOutput true;$root $doc->createEle…...

佛山高明建网站/站长字体

类是用来描述具有相同属性和方法的对象的集合。对象是类的实例化。创建一个类很简单&#xff0c;使用class关键字加上大括号即可&#xff0c;如下<?php class Person{}如上&#xff0c;这样一个名为Person的类就创建好了&#xff0c;通常情况下类名的首字母是需要大写的。实…...

建设中小企业网站/网络营销专业如何

but we cant use it unless you put visual studio in 64bit mode.最近装dlib时候遇到这个问题&#xff0c;很简单就能解决掉 Visual Studio用户通常应该以64位模式执行所有操作。默认情况下&#xff0c;Visual Studio是32位&#xff0c;在其输出和自己的执行中都是如此&…...

佛山高端外贸网站建设/长沙自动seo

整理一帖&#xff0c;方便速查网络通信常见端口汇总 端口号描述0端口无效端口,通常用于分析操作系统1端口传输控制协议端口服务多路开关选择器2端口管理实用程序3端口压缩进程5端口远程作业登录7端口回显9端口丢弃11端口在线用户13端口时间17端口每日引用18端口消息发送协议19端…...

四川省建设厅燃气网站/汕头seo网站推广

linux下Oracle11g RAC搭建&#xff08;二&#xff09; 一、安装前配置 网络的配置 IP占用测试 进入windows下&#xff0c;执行cmd&#xff0c;使用ping命令验证网段是否被占用。 注&#xff1a;用哪个网段都行&#xff0c;一定保证不要被其它设备占用即可。 ping 192.168.4…...

相亲网站/seo的主要内容

https://www.lydsy.com/JudgeOnline/problem.php?id2809 Description 在一个忍者的帮派里&#xff0c;一些忍者们被选中派遣给顾客&#xff0c;然后依据自己的工作获取报偿。在这个帮派里&#xff0c;有一名忍者被称之为 Master。除了 Master以外&#xff0c;每名忍者都有且仅…...