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

es 3期 第13节-多条件组合查询实战运用

#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。
#### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!!!

##### 索引字段与属性都属于静态设置,若后期变更历史数据需要重建索引才可生效
##### 对历史数据无效!!!!
##### 一定要重建索引!!!!
 

### 组合查询分类
## bool:布尔组合
## boost:加权
## constant:固定分值
## dis_max:单字符多字段组合
## function:函数脚本组合


## bool 逻辑条件
## bool逻辑条件是组合查询,最常用的,也是必须掌握的,DSL查询与SQL不一,传统查询里面的多条件组合通过观关键字组合,这里采用的是以下关键字
# 关键字            说明
# must              必须包含,类同Mysq1关键字 and ,计算分值
# should            可选包含,类同 Mysql关键字 or
# filter            必须包含,类同Mysql关键字 and,不计算分值
# must not          不包含,类同 Mysql 不等于关键字
# mixed 水平组合    混合以上,类同Mysgl多个条件平级组合
# mixed 嵌套组合    混合以上,类同Mysgl 多个括号组合条件

DELETE kibana_sample_data_flights_reindex
# 复制一份航班数据用于查询
# reindex后新索引字段是推断出来的,原来的keyword类型会被推断为text
POST _reindex
{"source": {"index": "kibana_sample_data_flights"},"dest": {"index": "kibana_sample_data_flights_reindex"}
}
GET kibana_sample_data_flights
GET kibana_sample_data_flights_reindex

## 最多支持1024个条件,有时候需要反思,如果业务上有这么多入参条件是否合理


# must 在数组里面2个字段是and的关系

GET kibana_sample_data_flights_reindex/_search
{"track_total_hits":true,# query 是DSL的入口"query":{"bool": {"must": [{"match": {"Dest":"Warsaw"}},{"match": {"DestWeather": "Rain"}}]}}
}

# should 满足任意一个即可,等同于or,注意观察第二个查询total是增加的

GET kibana_sample_data_flights_reindex/_search
{"track_total_hits":true,"query":{"bool": {"should": [{"match": {"Dest":"Warsaw"}}]}}
}
GET kibana_sample_data_flights_reindex/_search
{"track_total_hits":true,"query":{"bool": {"should": [{"match": {"Dest":"Warsaw"}},{"match": {"DestWeather": "Rain"}}]}}
}

# filter,类同于must,不过不计算分值,效率比must高,背后采用RaoringBitmap算法高效查询检索
# 这个使用是最多的,一般用来解决mysql的查询瓶颈
# 主要掌握这个就可以了!!!

GET kibana_sample_data_flights_reindex/_search
{"track_total_hits":true,"query":{"bool": {"filter": [{"match": {"Dest":"Warsaw"}},{"match": {"DestWeather": "Rain"}}]}}
}

# must_not 与must相反,反向选择不符合条件的结果

GET kibana_sample_data_flights_reindex/_search
{"track_total_hits":true,"query":{"bool": {"must_not": [{"match": {"Dest":"Warsaw"}},{"match": {"DestWeather": "Rain"}}]}}
}

# mixed 混合,水平组合,es可以说为每种字段类型都定义了查询语法
# 不同于mysql的索引,查询条件的先后不会影响查询结果和效率

GET kibana_sample_data_flights_reindex/_search
{"track_total_hits":true,"query":{"bool": {"must": [{"match": {"Dest": "Genoa"}}], "must_not": [{"match": {"Dest":"Warsaw"}},{"match": {"DestWeather": "Rain"}}]}}
}

# mixed 混合,嵌套组合,类同Mysgl 多个括号组合条件
# 可以一直嵌套,但是不推荐,不利于解析和阅读

GET kibana_sample_data_flights_reindex/_search
{"track_total_hits":true,"query":{"bool": {"must": [{"match": {"Dest": "Genoa"}},{"bool": {"must_not": [{"match": {"DestWeather": "Sunny"}}]}}]}}
}

## boost 加权组合查询,需要深度学习,这里为入门,适用于text字段
## 给部分字段增加分值权重,以此来影响分词查询排序
## ES 查询默认排序,采取的是依据关键字的关联度计算分值,默认算法是 BM25,多个字段查询时,可以跟不同的字段设定不同的权重,来调整排序。
# 权重组合应用
# 正向加权,就是增加此字段的权重,一般为正值
# 反向加权,就是降低此字段的权重,一般为小于1或者负值
# boosting,关键字
# positive,关键字,正向
# negative,关键字,反向
# negative_boost,关键字,用于降低反向加权的权重比值,取值范围 0~1之间
# boost,关键字,查询时使用,默认1,设置字段分值比重

# 查询1,标准分值
GET kibana_sample_data_flights_reindex/_search
{"track_total_hits":true,"query":{"bool": {"must_not": [{"match": {"Dest":"Warsaw"}},{"match": {"DestWeather": "Rain"}}]}}
}
# 查询2,negative_boost=0
GET kibana_sample_data_flights_reindex/_search
{"track_total_hits": true,"query": {"boosting": {"positive": {"match": {"Dest": "Warsaw"}},"negative": {"match": {"DestWeather": "Rain"}},"negative_boost": 0}}
}
# 查询3,negative_boost=2
GET kibana_sample_data_flights_reindex/_search
{"track_total_hits": true,"query": {"boosting": {"positive": {"match": {"Dest": "Warsaw"}},"negative": {"match": {"DestWeather": "Rain"}},"negative_boost": 2}}
}
# 查询4,negative_boost=0.5
GET kibana_sample_data_flights_reindex/_search
{"track_total_hits":true,"query":{"bool": {"must": [{"match": {"Dest": "Genoa"}},{"bool": {"must_not": [{"match": {"DestWeather": {"query": "Sunny","boost": 0.2  // 使用 negative_boost 降低不包含 "Sunny" 标签的文档的得分}}}]}}]}}
}
# 7.0版本以上不支持,静态加权方式,创建mapping时设置
DELETE device-001
PUT device-001
{"settings": {"refresh_interval": "15s","number_of_shards": 1},"mappings": {"properties": {"devId": {"type": "keyword"},"devName": {"type": "text","boost": 2},"devNameExt": {"type": "text","boost": 0.2}}}
}

## constant:固定分值
## 多字段组合查询,数据排序依赖很多字段共同的分值,有些不必要的字段,可以设定一个固定值,仅仅用来作为过滤条件,防止过度干预排序分值计算,从而影响排序
## 依赖filter查询模式

GET kibana_sample_data_flights_reindex/_search
{"track_total_hits": true,"query": {"constant_score": {"filter": {"match": {"Dest": "Warsaw"}},"boost": 1.2}}
}

## disiunction 最大分值多条件查询中,提取其中分值最高的,作为影响数据排序的因子
## 应用领域
## 多字段查询检索领域,有很多字段可以同时作为检索条件,但排序时,只要运用其中分值最高的那个用来排序即可,比如电商"商品标题"与"商品简要描述"
## dis_max 查询
## dis_max,关键字,最大值查询入口
## tie_breaker,关键字,最大分值增加分值,在原有的基础之上增加 多少,百分比,取值范围 0~1,默认 0.0
## boost,关键字,最大分值乘以权重,直接在原有分值上乘以权重值,默认 1=100%
## queries,关键字,组合多个查询条件,注意是should 关系

GET kibana_sample_data_flights_reindex/_search
{"track_total_hits": true,"query": {"dis_max": {"tie_breaker": 0,"boost": 1,"queries": [{"term": {"DestCountry.keyword": {"value": "GB"}}},{"match": {"Dest": "London"}}]}}
}

## Function函数组合
# 函数组合查询是 ES中最灵活的,也是最复杂的,同样功能型上也是提高了很多机制
# 查询原理:函数组合,是基于查询后的结果,在结果集上做二次打分,与之前组合查询不一样
# 先初步了解这种方法

# 查询模式
# Function:定义多个查询打分块
# Script_score:脚本定义分值计算规则
# weight:权重占比打分规则
# random:随机自动生成规则
# Field_value_factor:字段值因子
# gauss:高级函数等

# function score
# function_score,关键字,函数查询入口
# query,限制查询数据结果
# 查询航班案例数据,比对 function score 与之前的查询分值数值

# 普通查询
GET kibana_sample_data_flights_reindex/_search
{"track_total_hits": true,"query": {"term": {"DestCountry.keyword": {"value": "GB"}}}
}
# 入门查询1,限制查询范围
GET kibana_sample_data_flights_reindex/_search
{"track_total_hits": true,"query": {"function_score": {"query": {"term": {"DestCountry.keyword": {"value": "GB"}}}}}
}

# functions 多函数组合
# 组合多个 function 自定义查询,基于多个function 组合分值,自定义计算分值逻辑
# function_score,关键字,函数查询入口
# functions,关键字,多个函数组合
# weight,每个函数占比权重
# boost_mode,多函数组合分值计算规则,默认是multiply,相乘
# score_mode,多函数组合分值计算规则,默认是multiply,相乘

# score_mode 取值,多函数组合分值计算规则,默认是 multiply
# 取值         说明
# multiply     所有独立 function 计算后的分值相乘
# Sum          所有独立 function 计算后的分值汇总
# avg          所有独立 function 计算后的分值均值
# first        所有独立 function 计算后的分值选择第一个
# max          所有独立 function 计算后的分值最大值
# min          所有独立 function 计算后的分值最小值

# boost_mode 取值
# 取值         说明
# multiply     所有独立 function 计算后的分值相乘
# Sum          所有独立 function 计算后的分值汇总
# avg          所有独立 function 计算后的分值均值
# first        所有独立 function 计算后的分值选择第一个
# max          所有独立 function 计算后的分值最大值
# min          所有独立 function 计算后的分值最小值

# 查询航班案例数据,对比前后 functions 条件查询分值数据
GET kibana_sample_data_flights_reindex/_search
{"track_total_hits": true,"query": {"function_score": {"query": {"term": {"DestCountry.keyword":"GB"}},"boost": 1,"functions": [{"filter": {"match":{"Dest":"Manchester"}},"weight": 1},{"filter": {"match":{"Origin":"London"}},"weight": 2}],"max_boost": 10,"score_mode": "min","boost_mode": "multiply","min_score": 5}}
}

# script_score 脚本组合
# 自定义分值计算逻辑,替代默认的 BM25 算法等
# script score,关键字,脚本函数
# script,脚本语法,默认 painless
# boost_mode,分值计算方式,默认multiply=相乘,此处设置sum,加权值
# score_mode,分值计算方式,默认multiply=相乘
# 查询航班案例数据,对比前后查询分值数据,对比数据排序

# 查询1,基于数据字段值打分
GET kibana_sample_data_flights_reindex/_search
{"track_total_hits": true,"query": {"function_score": {"query": {"term": {"DestCountry.keyword": "GB"}},"script_score": {"script": "doc['FlightDelayMin'].value"},"score_mode": "multiply","boost_mode": "sum"}}
}
# 查询2,集成数学函数,Math.log
GET kibana_sample_data_flights_reindex/_search
{"track_total_hits": true,"query": {"function_score": {"query": {"term": {"DestCountry.keyword": "GB"}},"script_score": {"script": "Math.log(1+doc['FlightDelayMin'].value)"},"score_mode": "multiply","boost_mode": "sum"}}
}

## Range 应用
# Range 范围类型,是ES数据类型很大的创新,相比传统数据库,性能优势非常明显,高达几个数量级,内部采用BDK树算法检索。有很多应用场景,比如衣服尺寸,设计时都是按照一个范围值设计的,适合 175~185 身高范围等。

# 范围类型
# 类型名称           类型说明
# integer_range      整数范围数值类型 
# float_range        单精度范围数值类型
# long_range         日期范围类型
# double_range       应用于IP地址范围检索
# date_range         注意日期格式 format
# ip_range           注意ip查询时,语法规则必须符合规范

# 逻辑关系
# 关键字   说明
# gte      填充数据时,数据的起始值包括值本身,类同Mysql 中的大于等于 
# gt       数据起始值,不包括值本身
# lte      填充数据时,数据的结尾值,包括值本身,类同Mysql 中的小于等于 
# lt       数据结尾值,不包括值本身
# relation 查询时,范围计算的关系模式,必须是range字段才有效,关系值:WITHIN=包含, CONTAINS=反包含,INTERSECTS=交叉(默认)

# 创建索引,设置range字段,对比前后查询结果
DELETE device-001
PUT device-001
{"mappings": {"properties": {"devId": {"type": "keyword"},"in_voltage": {"type": "integer_range"},"out_voltage": {"type": "integer"}}}
}
PUT device-001/_doc/1
{"devId":"001","in_voltage":{"gte":100,"lte":200},"out_voltage": 100
}
PUT device-001/_doc/2
{"devId":"002","in_voltage":{"gte":200,"lte":300},"out_voltage": 200
}
PUT device-001/_doc/3
{"devId":"003","in_voltage":{"gte":300,"lte":400},"out_voltage": 200
}
GET device-001/_search
{}
# 查询1,默认关系,INTERSECTS 交叉
GET device-001/_search
{"query":{"range": {"in_voltage": {"gte": 150,"lte": 250,"relation":"INTERSECTS"}}}
}
# 查询2,包含
GET device-001/_search
{"query":{"range": {"in_voltage": {"gte": 150,"lte": 350,"relation":"WITHIN"}}}
}
# 查询3,反包含
GET device-001/_search
{"query":{"range": {"in_voltage": {"gte": 150,"lte": 350,"relation":"CONTAINS"}}}
}

# 单数值类型
# 单数值类型,在设置时,仅需要一个值,后续查询可以采用范围查询
# range,关键字来,查询语法,包括范围 gte,lte
# relation,关键字,查询时关系类型,默认交叉,与range类型一样

GET device-001/_search
{"query":{"range": {"out_voltage": {"gte": 50,"lte": 150}}}
}

## Join父子关系查询
# join,字段“类型关键字
# relations,关系关键字
# routing ,路由保证父子数据在同一分片中
# 场景:假设公司的基本信息,一个公司会有多个子公司,子公司下属又有子公司

DELETE company-001
# 创建join类型字段索引
PUT company-001
{"mappings": {"properties": {"companyId": {"type": "keyword"},"companyName": {"type": "keyword"},"join_father_child": {"type": "join","relations": {"father": "child"}}}}
}
PUT company-001/_doc/1
{"companyId":"001","companyName":"集团总公司","join_father_child":"father"
}
PUT company-001/_doc/2?routing=1
{"companyId":"002","companyName":"浙江分公司","join_father_child":{"name":"child","parent":"1"}
}
PUT company-001/_doc/3?routing=1
{"companyId":"003","companyName":"武汉分公司","join_father_child":{"name":"child","parent":"1"}
}
# 查询分为子查询和父查询,关键字:parent_id,has_parent,has_child
# 依据父id查询所有子节点
GET company-001/_search
{"query":{"parent_id":{"type":"child","id":1}}
}
# 查询有子节点的父节点数据
GET company-001/_search
{"query":{"has_child":{"type":"child","query":{"match_all": {}}}}
}
# 查询有父节点的子节点数据
GET company-001/_search
{"query":{"has_parent":{"parent_type":"father","query":{"match_all": {}}}}
}

## Nested 嵌套关系
# ES 支持数组类型,但数组类型在查询时,如果是键值对需求,则会出现查询误差,这是由内部实现决定的,为此ES 推出了 nested 嵌套键值对类型
# nested,字段类型关键字
# 场景:假设一个公司有很多区域信息,每一组都是一个键值对,包括省份与城市,运用 nested 类型,在 area字段下增加 type=nested,查询语法中增加 nested 标记

DELETE company-001
# 创建nested类型字段索引
PUT company-001
{"mappings":{"properties":{"companyId":{"type":"keyword"},"companyName":{"type":"keyword"},"area":{"type":"nested","properties":{"province":{"type":"keyword"},"city":{"type":"keyword"}}}}}
}
# 设置数据
PUT company-001/_doc/1
{"companyId": "001","companyName": "零食铺","area": [{"province": "zj","city": "hz"},{"province": "hb","city": "wh"}]
}
# 查询数据,无结果
GET company-001/_search
{"query":{"nested": {"path": "area","query": {"bool": {"must": [{"term": {"area.province": {"value": "zj"}}},{"term": {"area.city": {"value": "wh"}}}]}}}}
}
# 查询数据,有结果
GET company-001/_search
{"query":{"nested": {"path": "area","query": {"bool": {"must": [{"term": {"area.province": {"value": "zj"}}},{"term": {"area.city": {"value": "hz"}}}]}}}}
}

### 组合查询限制条件与设置
## indices.query.bool.max clause_count
## 索引查询条件,单次最多组合条件查询限制默认1024个,超过会报错
## 此设置属于静态设置,需要在节点启动前设置,且集群中所有节点必须设置为一样
## 在节点 elasticsearch.yml 文件中设置
## indices.query.bool.max clause_count: 1024


### 组合查询建议
## Bool组合优先filter,满足绝大多数场景
## 组合查询优先bool组合条件,其他的都是特定领域,需要再深入研究
## 性能上慎重使用function组合,脚本有性能问题

## 文档地址
# compound 组合查询
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/compound-queries.html
# function score 函数查询
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/query-dsl-function-score-query.html
# range 范围查询
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/range.html
# join 关联查询
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/joining-queries.html
# search-setting 查询条件数量限制
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/search-settings.html
# boost 字段属性
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/mapping-boost.html
 

相关文章:

es 3期 第13节-多条件组合查询实战运用

#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性&#xff…...

全局token验证

全局token验证 简介 ​通俗地说,JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用…...

实时美颜技术详解:美颜SDK与直播APP开发实践

通过集成美颜SDK(软件开发工具包),开发者能够轻松为直播APP提供实时美颜效果,改善用户的直播体验。本篇文章,小编将深入探讨实时美颜技术,重点分析美颜SDK的核心技术及其在直播APP中的应用实践。 一、实时…...

电子应用设计方案-41:智能微波炉系统方案设计

智能微波炉系统方案设计 一、引言 随着科技的不断进步,人们对于厨房电器的智能化需求日益增长。智能微波炉作为现代厨房中的重要设备,应具备更便捷、高效、个性化的功能,以满足用户多样化的烹饪需求。 二、系统概述 1. 系统目标 - 提供精确…...

P5736 【深基7.例2】质数筛

题目描述 输入 𝑛个不大于 105 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。 输入格式 第一行输入一个正整数 𝑛,表示整数个数。 第二行输入 𝑛 个正整数 𝑎…...

数据结构初阶1 时间复杂度和空间复杂度

本章重点 算法效率时间复杂度空间复杂度常见时间复杂度以及复杂度OJ练习 1.算法效率 1.1 如何衡量一个算法的好坏 如何衡量一个算法的好坏呢&#xff1f;比如对于以下斐波那契数列&#xff1a; long long Fib(int N) { if(N < 3) return 1;return Fib(N-1) Fib(N-2); }斐…...

E130 PHP+MYSQL+动漫门户网站的设计与实现 视频网站系统 在线点播视频 源码 配置 文档 全套资料

动漫门户网站 1.摘要2. 开发背景和意义3.项目功能4.界面展示5.源码获取 1.摘要 21世纪是信息的时代&#xff0c;随着信息技术与网络技术的发展&#xff0c;其已经渗透到人们日常生活的方方面面&#xff0c;与人们是日常生活已经建立密不可分的联系。本网站利用Internet网络, M…...

OSCP - Proving Grounds - Fanatastic

主要知识点 CVE-2021-43798漏洞利用 具体步骤 执行nmap 扫描&#xff0c;22/3000/9090端口开放&#xff0c;应该是ssh,grafana 和Prometheus Nmap scan report for 192.168.52.181 Host is up (0.00081s latency). Not shown: 65532 closed tcp ports (reset) PORT STA…...

ArcMap 分享统计点要素、路网、降雨量等功能操作

ArcMap 分享统计点要素、路网等功能等功能操作今天进行 一、按格网统计点要素 1、创建公里网格统计单元 点击确定后展示 打开连接 点击后 展示 2、处理属性 1&#xff09;查看属性表 每个小格都统计出了点的数量 2&#xff09;查看属性 符号系统 点击应用后展示结果&#x…...

概率论——假设检验

解题步骤&#xff1a; 1、提出假设H0和H1 2、定类型&#xff0c;摆公式 3、计算统计量和拒绝域 4、定论、总结 Z检验 条件&#xff1a; 对μ进行检验&#xff0c;并且总体方差已知道 例题&#xff1a; 1、假设H0为可以认为是570N&#xff0c;H1为不可以认为是570N 2、Z…...

爬虫项目练手

python抓取优美图库小姐姐图片 整体功能概述 这段 Python 代码定义了一个名为 ImageDownloader 的类&#xff0c;其主要目的是从指定网站&#xff08;https://www.umei.cc&#xff09;上按照不同的图片分类&#xff0c;爬取图片并保存到本地相应的文件夹中。不过需要注意&…...

C程序设计:解决Fibonacci.数列问题

‘ 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称“兔子数列”&#xff0c;其数值为&#xff1a;1、1、2、…...

35页PDF | 元数据与数据血缘落地实施(限免下载)

一、前言 这份报告详细介绍了元数据与数据血缘的概念、重要性以及在企业数据中台中的应用。报告阐述了数据中台的核心价值在于整合和管理体系内的数据&#xff0c;以提升数据资产化能力并支持业务决策。报告还涵盖了元数据的分类&#xff08;技术元数据和业务元数据&#xff0…...

Lua元表和元方法的使用

元表是一个普通的 Lua 表&#xff0c;包含一组元方法&#xff0c;这些元方法与 Lua 中的事件相关联。事件发生在 Lua 执行某些操作时&#xff0c;例如加法、字符串连接、比较等。元方法是普通的 Lua 函数&#xff0c;在特定事件发生时被调用。 元表包含了以下元方法&#xff1…...

基于Pyhton的人脸识别(Python 3.12+face_recognition库)

使用Python进行人脸编码和比较 简介 在这个教程中&#xff0c;我们将学习如何使用Python和face_recognition库来加载图像、提取人脸编码&#xff0c;并比较两个人脸是否相似。face_recognition库是一个强大的工具&#xff0c;它基于dlib的深度学习模型&#xff0c;可以轻松实…...

Spring Boot+Netty

因工作中需要给第三方屏幕厂家下发广告&#xff0c;音频&#xff0c;图片等内容&#xff0c;对方提供TCP接口于是我使用Netty长链接进行数据传输 1.添加依赖 <!-- netty依赖--><dependency><groupId>io.netty</groupId><artifactId>netty-all&…...

LCR 023. 相交链表

一.题目&#xff1a; LCR 023. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 二.我的原始解法-无&#xff1a; 三.其他人的正确及好的解法&#xff0c;力扣解法参考&#xff1a; 哈希表法及双指针法&#xff1a;LCR 023. 相交链表 - 力扣&#xff08;LeetCode&#xff0…...

Linux命令行下载工具

1. curl 1.1. 介绍 curl是一个功能强大的命令行工具&#xff0c;用于在各种网络协议下传输数据。它支持多种协议&#xff0c;包括但不限于 HTTP、HTTPS、FTP、FTPS、SCP、SFTP、SMTP、POP3、IMAP 等&#xff0c;这使得它在网络数据交互场景中有广泛的应用。curl可以模拟浏览器…...

期末复习-Hadoop名词解释+简答题纯享版

目录 一、名称解释&#xff08;8选5&#xff09; 1.什么是大数据 2.大数据的5V特征 3.什么是SSH 4.HDFS&#xff08;p32&#xff09; 5.名称节点 6.数据节点 7.元数据 8.倒排索引 9.单点故障 10.高可用 11.数据仓库 二、简答题 1.简述Hadoop的优点及其含义 2.简述…...

嵌入式Linux无窗口系统下搭建 Qt 开发环境

嵌入式Linux无窗口系统下搭建 Qt 开发环境 本文将介绍如何在树莓派的嵌入式 Linux 环境下&#xff0c;搭建 Qt 开发环境&#xff0c;实现无窗口系统模式&#xff08;framebuffer&#xff09;下的图形程序开发。 1. 安装 Qt 环境 接下来&#xff0c;安装核心 Qt 开发库以及与 …...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...