ES高级查询Query DSL查询详解、term术语级别查询、全文检索、highlight高亮

文章目录

  • ES高级查询Query DSL
    • match_all
      • 返回源数据_source
      • 返回指定条数size
      • 分页查询from&size
      • 指定字段排序sort
    • 术语级别查询
      • term query术语查询
      • terms query多术语查询
      • range query范围查询
      • exists query
      • ids query
      • prefix query前缀查询
      • wildcard query通配符查询
      • fuzzy query模糊查询
    • 全文检索
      • match query匹配查询
      • multi_match query 多字段查询
      • match_phrase query短语查询
      • query_string query
      • simple_query_string
    • bool query布尔查询
    • highlight高亮
      • 基本使用
      • 自定义高亮标签
      • 多字段高亮

ES高级查询Query DSL

ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified Language 领域专用语言) ,

Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。

官网

标准格式如下

GET /索引名/_doc/_search {JOSN请求体}# 也可以省略_doc 简写成下面这种方式
GET /索引名//_search {JOSN请求体}

案例

# 无条件查询,默认返回10条数据
GET /sys_user/_search
{"query": {"match_all": {}}
}

在这里插入图片描述



案例数据生成,接下来的案例很多都是操作改索引

# 删除现有索引
DELETE /sys_user# 重新创建索引 指定ik分词器
PUT /sys_user
{"settings" : {"index" : {"analysis.analyzer.default.type": "ik_max_word"}}
}# 创建文档,指定id
PUT /sys_user/_doc/1
{
"name": "张三",
"sex": 1,
"age": 25,
"address": "广州天河公园",
"remark": "java developer"
}
PUT /sys_user/_doc/2
{
"name": "李四",
"sex": 1,
"age": 28,
"address": "广州荔湾大厦",
"remark": "java assistant"
}PUT /sys_user/_doc/3
{
"name": "王五",
"sex": 0,
"age": 26,
"address": "广州白云山公园",
"remark": "php developer"
}PUT /sys_user/_doc/4
{
"name": "赵六",
"sex": 0,
"age": 22,
"address": "长沙橘子洲",
"remark": "python assistant"
}PUT /sys_user/_doc/5
{
"name": "张龙",
"sex": 0,
"age": 19,
"address": "长沙麓谷企业广场",
"remark": "java architect assistant"
}    PUT /sys_user/_doc/6
{
"name": "赵虎",
"sex": 1,
"age": 32,
"address": "长沙麓谷兴工国际产业园",
"remark": "java architect"
}    PUT /sys_user/_doc/7
{
"name": "李虎",
"sex": 1,
"age": 32,
"address": "广州番禺节能科技园",
"remark": "java architect"
}PUT /sys_user/_doc/8
{
"name": "张星",
"sex": 1,
"age": 32,
"address": "武汉东湖高新区未来智汇城",
"remark": "golang developer"
}



match_all

使用match_all,匹配所有文档,默认只会返回10条数据。

原因:_search查询默认采用的是分页查询,每页记录数size的默认值为10。如果想显示更多数据,指定size

# 无条件查询,_search默认返回10条数据
GET /sys_user/_search# 等价于
GET /sys_user/_search
{"query": {"match_all": {}}
}



返回源数据_source

_source关键字,是一个数组,在数组中指定用来指定暂时哪些字段,类似于Mysql的select 字段 from table 或MongoDB中的 $project映射

# _source关键字的相关操作
# 返回指定字段
GET /sys_user/_search
{"query": {"match_all": {}},"_source": ["name","age"]
}#不查看源数据,仅查看元字段
GET /sys_user/_search
{"query": {"match_all": {}},"_source": false
}# 只看以a开头的字段
GET /sys_user/_search
{"query": {"match_all": {}},"_source": "a*"
}



返回指定条数size

size 关键字: 指定查询结果中返回指定条数。 默认返回值10条

# 通过size关键字指定返回结果数
GET /sys_user/_search
{"query": {"match_all": {}},"size": 20
}



分页查询from&size

size:显示应该返回的结果数量,默认是 10

from:显示应该跳过的初始结果数量,默认是 0

from 关键字用来指定起始返回位置,和size关键字连用可实现分页效果

# 通过from + size关键字实现分页
# 跳过前面5个文档,共显示两个文档
GET /sys_user/_search
{"query": {"match_all": {}},"from": 5, "size": 2
}



指定字段排序sort

注意:sort排序会让 _score相关性得分失效

# 使用sort关键字,按age字段降序 排序
GET /sys_user/_search
{"query": {"match_all": {}},"sort": [{"age": {"order": "desc"}}]
}# sort排序 + from size分页
GET /sys_user/_search
{"query": {"match_all": {}},"sort": [{"age": {"order": "desc"}}],"from": 5,"size": 3
}



术语级别查询

术语级别查询(Term-Level Queries)指的是搜索内容不经过文本分析直接用于文本匹配

搜索的对象大多是索引的非text类型字段。



term query术语查询

Term查询,对输入不做分词。会将输入作为一个整体,在倒排索引中查找准确的词项,

术语查询直接返回包含搜索内容的文档,常用来查询索引中某个类型为keyword的文本字段,类似于SQL的“=”查询,使用十分普遍。

注意:最好不要在term查询的字段中使用text字段,因为text字段会被分词,这样做既没有意义,还很有可能什么也查不到。

# 对bool,日期,数字,结构化的文本可以利用term做精确匹配
# term 精确匹配
GET /sys_user/_search
{"query": {"term": {"age": {"value": "25"}}}
}# 思考: 查询广州白云是否有数据,为什么?
# 没有数据,因为address是text类型,索引数据时会创建倒排索引,而直接用 term 广州白云这个词 倒排索引中不存在所以查询不到数据
GET /sys_user/_search
{"query": {"term": {"address": {"value": "广州白云"}}}
}# 采用term精确查询, 查询字段映射类型为keyword
# 能查询都数据,因为address字段是类型为text 子类型为keyword,会创建一个完整address字段内容在倒排索引中
GET /sys_user/_search
{"query": {"term": {"address.keyword": {"value": "广州白云山公园"}}}
}



在ES中,Term查询,对输入不做分词。会将输入作为一个整体,在倒排索引中查找准确的词项,并且使用相关度算分公式为每个包含该词项的文档进行相关度算分。

可以通过 constant_score 将查询转换成一个 Filtering,避免算分,并利用缓存,提高性能。

  • 将Query 转成 Filter,忽略TF-IDF计算,避免相关性算分的开销
  • Filter可以有效利用缓存
# 使用constant_score + filter 避免相关性算分
GET /sys_user/_search
{"query": {"constant_score": {"filter": {"term": {"address.keyword": "广州白云山公园"}}}}
}



term处理多值字段时,term查询是包含,不是等于。

POST /employee/_bulk
{"index":{"_id":1}}
{"name":"小明","interest":["跑步","篮球"]}
{"index":{"_id":2}}
{"name":"小红","interest":["跳舞","画画"]}
{"index":{"_id":3}}
{"name":"小丽","interest":["跳舞","唱歌","跑步"]}

在这里插入图片描述



terms query多术语查询

terms 用于指定字段上匹配多个词项,这里会精确匹配指定字段中包含的任何一个词项

# trems 多术语匹配
GET /sys_user/_search
{"query": {"terms": {"remark.keyword": ["java developer","java assistant"]}}}
}



range query范围查询

关键字

  • range 范围关键字
  • gte 大于等于
  • lte 小于等于
  • gt 大于
  • lt 小于
  • now 当前时间



# 查询age在[18,25]之间的文档,并对结果做一个降序排序
GET /sys_user/_search
{"query": {"range": {"age": {"gte": 18,"lte": 25}}}, "sort": [{"age": {"order": "desc"}}]
}

日期范围的比较 可以使用now表示当前时间

# 日期范围的比较
PUT /product/_bulk
{"index": {"_id": 1}}
{"productId": "XHDK-1293","price": 100,"date": "2022-01-01"}
{"index": {"_id": 2}}
{"productId": "XHDK-3566","price": 200,"date": "2023-01-01"}# 当前时间 - 2年    当然你也可以直接写"gte": "2022-08-12"
GET /product/_search
{"query": {"range": {"date": {"gte": "now-2y"}}}
}



exists query

使用exists关键字查询,查询文档中所有存在该字段的文档

字段不存在 和 字段值为null的文档都查询不出来

# 查询所有存在name字段的文档数据
GET /sys_user/_search
{"query": {"exists": {"field": "name"}}
}
# 索引一个文档,没有name字段
POST /sys_user/_doc
{"sex": 1,"age": 25,"address": "广州天河公园111","remark": "java developer111"
}# 索引一个文档,name字段的值为null
POST /sys_user/_doc
{"name": null,"sex": 1,"age": 25,"address": "广州天河公园222","remark": "java developer222"
}# 索引一个文档,name字段的值为""
POST /sys_user/_doc
{"name": "","sex": 1,"age": 25,"address": "广州天河公园333","remark": "java developer333"
}# 最终只能查询到  name字段的值为"" 的文档, name字段不存在 和 name值为null的文档都查询不出来
GET /sys_user/_search
{"query": {"exists": {"field": "name"}}
}



ids query

ids关键字,值为数组类型,可以根据一组id查询文档数据

# 使用ids关键字,查询一组id对应的文档
GET /sys_user/_search
{"query": {"ids": {"values": [1,2,3]}}
}



prefix query前缀查询

直接根据传入的前缀去倒排索引中进行匹配,判断倒排索引中的每个term是否以所指定的前缀开头。它不会分析要搜索字符串,传入的前缀就是想要查找的前缀

默认状态下,前缀查询不做相关性分数计算,它只是将所有匹配的文档返回,然后赋予所有相关分数值为1。它的行为更像是一个过滤器而不是查询。两者实际的区别就是过滤器是可以被缓存的,而前缀查询不行。

# 使用prefilx前缀匹配查询
GET /sys_user/_search
{"query": {"prefix": {"address": {"value": "广州"}}}
}



wildcard query通配符查询

工作原理和prefix相同,只不过它不是只比较开头,它能支持更为复杂的匹配模式。

# 使用wildcard通配符匹配
GET /sys_user/_search
{"query": {"wildcard": {"address": {"value": "*白*"}}}
}



fuzzy query模糊查询

使用fuzziness属性来进行模糊查询,从而达到搜索有错别字的情形。

fuzzy 查询会用到两个很重要的参数,fuzziness,prefix_length

  • fuzziness

    对输入的关键字进行几次操作可以和倒排索引中的term词匹配。

    新增一个字符,删除一个字符,修改一个字符,每次操作可以记做编辑距离为1;

    该参数默认值为0,即不开启模糊查询; fuzzy 模糊查询 最大模糊错误必须在0-2之间

  • prefix_length

    输入的关键字前面几个字符必须要和倒排索引的term词匹配,关键字前面几个字符不允许写错

    默认值为0

# 使用fuzzy关键字进行模糊查询
# 允许一个错别字,但是第一个字不能是错别字
GET /sys_user/_search
{"query": {"fuzzy": {"address": {"value": "白晕山","fuzziness": 1,"prefix_length": 1}}}
}



全文检索

全文检索查询旨在基于相关性搜索和匹配文本数据。

这些查询会对输入的文本进行分析,将其拆分为词项(单个单词),并执行诸如分词、词干处理和标准化等操作。

以相关性为基础进行搜索和匹配。全文检索查询使用相关性算法来确定文档与查询的匹配程度,并按照相关性进行排序。相关性可以基于词项的频率、权重和其他因素来计算。



match query匹配查询

match在匹配时会对所查找的关键词进行分词,然后按分词匹配查找。

match支持以下参数:

  • query : 指定匹配的值

  • operator : 匹配条件类型

    • and : 条件分词后都要匹配
    • or : 条件分词后有一个匹配即可(默认)
  • minmum_should_match : 最低匹配度,即条件在倒排索引中最低的匹配度

# 下面两种写法一样,两种写法都是operator分词后or的效果
GET /sys_user/_search
{"query": {"match": {"address": "广州白云山"}}
}# 如果只有关键词需要指定,那么match关键词下的query参数就可以省略
GET /sys_user/_search
{"query": {"match": {"address": {"query": "广州白云山"}}}
}# 分词后 and的结果
GET /sys_user/_search
{"query": {"match": {"address": {"query": "广州白云山","operator": "and"}}}
}# 如果分词后是or操作,我们也可以添加minmum_should_match 来指定最低匹配度
# 至少要匹配两个分词
GET /sys_user/_search
{"query": {"match": {"address": {"query": "广州白云山公园","operator": "or","minimum_should_match": 2}}}
}



对于match查询,其底层逻辑的概述:

  1. 分词:首先,输入的查询文本会被分词器进行分词。分词器会将文本拆分成一个个词项(terms),如单词、短语或特定字符。分词器通常根据特定的语言规则和配置进行操作。
  2. 倒排索引:ES使用倒排索引来加速搜索过程。倒排索引是一种数据结构,它将词项映射到包含这些词项的文档。每个词项都有一个对应的倒排列表,其中包含了包含该词项的所有文档的引用。
  3. 匹配计算:一旦查询被分词,ES将根据查询的类型和参数计算文档与查询的匹配度。对于match查询,ES将比较查询的词项与倒排索引中的词项,并计算文档的相关性得分。相关性得分衡量了文档与查询的匹配程度。
  4. 结果返回:根据相关性得分,ES将返回最匹配的文档作为搜索结果。搜索结果通常按照相关性得分进行排序,以便最相关的文档排在前面。

在这里插入图片描述



在这里插入图片描述




在这里插入图片描述



multi_match query 多字段查询

让查询关键词在文档内的多个字段中进行查询

# 使用multi_match,让输入的关键词在多个字段中进行查找匹配
# 这其中也有 operator  minimum_should_match 这些参数
GET /sys_user/_search
{"query": {"multi_match": {"query": "长沙赵六","fields": ["name", "address"],"operator": "or","minimum_should_match": 1}}
}



match_phrase query短语查询

对搜索文本进行分词,再去倒排索引找每个分词,并要求分词相邻。可以通过slop参数设置允许分词之间出现的最大间隔距离

我们先来使用分词器来看看一个文本是如何分词的

GET _analyze
{"analyzer": "ik_max_word","text": "广州白云山"
}

在这里插入图片描述



那么我们现在输入文本广州白云山应该是能查询到数据,因为这两个分词是相邻的,如果输入文本广州白云应该是查询不到数据,因为这两个分词是不相邻的

# 能查询到数据,因为广州 白云山 这两个分词是相邻的,
GET /sys_user/_search
{"query": {"match_phrase": {"address": "广州白云山"}}
}# 查询不到数据,因为 广州 白云  这两个分词是不相邻
GET /sys_user/_search
{"query": {"match_phrase": {"address": "广州白云"}}
}# slop参数设置允许分词之间出现的最大间隔距离
GET /sys_user/_search
{"query": {"match_phrase": {"address": {"query": "广州白云","slop": 2}}}
}

在这里插入图片描述



query_string query

对输入的文本在文档中所有字段进行匹配搜索

允许我们在单个查询字符串中指定AND | OR | NOT条件,必须大写

它也支持单字段查询和多字段查询,只不过这些功能我们通过match、multi_match也能实现

# 未指定字段查询,查询文档中的所有字段的值
# AND必须大写 文档中必须包含这两个分词才能查询出来
GET /sys_user/_search
{"query": {"query_string": {"query": "赵六 AND 橘子洲"}}
}# 指定单字段   添加default_field参数
GET /sys_user/_search
{"query": {"query_string": {"default_field": "address", "query": "赵六 OR 橘子洲"}}
}# 指定多字段  添加
GET /sys_user/_search
{"query": {"query_string": {"fields": ["name", "address"], "query": "张三 OR (赵六 AND 橘子洲)"}}
}



simple_query_string

类似于query_string ,但是会忽略错误的语法,同时只支持部分查询语法,不支持AND OR NOT ,如果存在AND这些会当作普通字符串处理。

支持部分逻辑:

  • +代替AND
  • |代替OR
  • -代替NOT
# simple_query_string 默认的operator是OR
GET /sys_user/_search
{"query": {"simple_query_string": {"fields": ["name","address"],"query": "广州公园","default_operator": "AND"}}
}GET /sys_user/_search
{"query": {"simple_query_string": {"fields": ["name","address"],"query": "广州 + 公园"}}
}



bool query布尔查询

  • 搜索上下文query context

    需计算每个文档与搜索条件相关性得分,有一定性能开销,带文本分析的全文检索查询语句适合放在搜索上下文中

  • 过滤上下文filter context

    只判断搜索条件跟文档是否匹配,不计算相关性得分。可以使用缓存加快响应速度,术语级别查询是否放在过滤上下文中



类型说明
must可包含多个查询条件,每个条件均满足的文档才能被搜索到,每次查询需要计算相关度得分,属于搜索上下文
should可包含多个查询条件,不存在must和fiter条件时,至少要满足多个查询条件中的一个,文档才能被搜索到,否则需满足的条件数量不受限制,匹配到的查询越多相关度越高,也属于搜索上下文
filter可包含多个过滤条件,每个条件均满足的文档才能被搜索到,每个过滤条件不计算相关度得分,结果在一定条件下会被缓存, 属于过滤上下文
must_not可包含多个过滤条件,每个条件均不满足的文档才能被搜索到,每个过滤条件不计算相关度得分,结果在一定条件下会被缓存, 属于过滤上下文



案例

生成案例数据

PUT /books
{"settings": {"number_of_replicas": 1,"number_of_shards": 1},"mappings": {"properties": {"id": {"type": "long"},"title": {"type": "text","analyzer": "ik_max_word"},"language": {"type": "keyword"},"author": {"type": "keyword"},"price": {"type": "double"},"publish_time": {"type": "date","format": "yyy-MM-dd"},"description": {"type": "text","analyzer": "ik_max_word"}}}
}POST /_bulk
{"index":{"_index":"books","_id":"1"}}
{"id":"1", "title":"Java编程思想", "language":"java", "author":"Bruce Eckel", "price":70.20, "publish_time":"2007-10-01", "description":"Java学习必读经典,殿堂级著作!赢得了全球程序员的广泛赞誉。"}
{"index":{"_index":"books","_id":"2"}}
{"id":"2","title":"Java程序性能优化","language":"java","author":"葛一鸣","price":46.5,"publish_time":"2012-08-01","description":"让你的Java程序更快、更稳定。深入剖析软件设计层面、代码层面、JVM虚拟机层面的优化方法"}
{"index":{"_index":"books","_id":"3"}}
{"id":"3","title":"Python科学计算","language":"python","author":"张若愚","price":81.4,"publish_time":"2016-05-01","description":"零基础学python,光盘中作者独家整合开发winPython运行环境,涵盖了Python各个扩展库"}
{"index":{"_index":"books","_id":"4"}}
{"id":"4", "title":"Python基础教程", "language":"python", "author":"Helant", "price":54.50, "publish_time":"2014-03-01", "description":"经典的Python入门教程,层次鲜明,结构严谨,内容翔实"}
{"index":{"_index":"books","_id":"5"}}
{"id":"5","title":"JavaScript高级程序设计","language":"javascript","author":"Nicholas C. Zakas","price":66.4,"publish_time":"2012-10-01","description":"JavaScript技术经典名著"}

bool 查询案例

# 使用must类型,需满足所有查询条件,属于搜索上下文
GET /books/_search
{"query": {"bool": {"must": [{"match": {"title": "Java编程"}},{"match": {"description": "性能优化"}}]}}
}# 使用 should 满足任意一个查询条件即可
# 通过 minimum_should_match 参数指定需要满足条件的个数
GET /books/_search
{"query": {"bool": {"should": [{"match": {"title": "java编程"}},{"match": {"description": "性能优化"}}],"minimum_should_match": 1}}
}# 使用 filter 需满足所有查询条件
GET /books/_search
{"query": {"bool": {"filter": [{"range": {"price": {"gte": 20,"lte": 100}}},{"term": {"language": "java"}}]}}
}



在这里插入图片描述

在这里插入图片描述
在这里插入图片描述



highlight高亮

highlight 关键字: 可以让符合条件的文档中的关键词高亮。

highlight相关属性:

  • pre_tags 前缀标签
  • post_tags 后缀标签
  • tags_schema 设置为styled可以使用内置高亮样式
  • require_field_match 多字段高亮需要设置为false



基本使用

示例数据

#指定ik分词器
PUT /products
{"settings" : {"index" : {"analysis.analyzer.default.type": "ik_max_word"}}
}PUT /products/_doc/1
{"proId" : "2","name" : "牛仔男外套","desc" : "牛仔外套男装春季衣服男春装夹克修身休闲男生潮牌工装潮流头号青年春秋棒球服男 7705浅蓝常规 XL","timestamp" : 1576313264451,"createTime" : "2019-12-13 12:56:56"
}PUT /products/_doc/2
{"proId" : "6","name" : "HLA海澜之家牛仔裤男","desc" : "HLA海澜之家牛仔裤男2019时尚有型舒适HKNAD3E109A 牛仔蓝(A9)175/82A(32)","timestamp" : 1576314265571,"createTime" : "2019-12-18 15:56:56"
}



测试

GET /products/_search
{"query": {"term": {"name": {"value": "牛仔"}}},"highlight": {"fields": {"*": {}}}
}

在这里插入图片描述



自定义高亮标签

可以在highlight中使用pre_tagspost_tags

GET /products/_search
{"query": {"multi_match": {"query": "牛仔","fields": ["name","desc"]}},"highlight": {"pre_tags": ["<span style='color:red'>"], "post_tags": ["</span>"], "fields": {"*": {}}}
}

在这里插入图片描述



多字段高亮

之前的案例中,都是查询匹配哪些字段,highlight高亮标签中才有这些字段数据。我们也可以指定多字段都可以有高亮数据

使用多字段高亮就需要把require_field_match 参数的值设置为false

# 多字段高亮
# require_field_match属性设置为false 在fields中指定多个字段
GET /products/_search
{"query": {"match": {"name": "牛仔"}},"highlight": {"pre_tags": ["<span style='color:red'>"], "post_tags": ["</span>"], "require_field_match": "false", "fields": {"name": {},"desc": {}}}
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视化大屏-实现自动滚动

一、背景&#xff1a;可视化大屏通常需要用到自动滚动的效果&#xff0c;本文主要采用的是vue-seamless-scroll组件来实现&#xff08;可参考官方文档&#xff09; 二、实现效果&#xff1a; 自动滚动 三、代码实现&#xff1a; 解题思路&#xff1a; 1.先安装依赖包 npm inst…

亲测解决Verifying shim SBAT data failed: Security Policy Violation

在小虎用u盘安装ubuntu系统的时候&#xff0c;笔记本出现了这个问题&#xff0c;解决方法是管关闭security boot。 解决方法 利用F2\F10\F12进入Bios设置&#xff0c;关闭security boot即可。 Use F2 to enter the bios security settings, close it. 参考 Verifying shim…

基于YOLOv8的船舶目标检测与分割(ONNX模型)

项目背景 需求分析&#xff1a;在海洋监控、港口管理、海事安全等领域&#xff0c;自动化的船只检测与分割技术对于提高效率和安全性至关重要。技术选型&#xff1a;YOLOv8是YOLO系列的一个较新版本&#xff0c;以其速度快、准确率高而著称。使用ONNX&#xff08;Open Neural …

亲测好用,吐血整理 ChatGPT 3.5/4.0 新手使用手册~ 【2024年8月 更新】

废话不多说&#xff0c;直接分享正文~ 以下是小编为大家搜集到的最新的ChatGPT国内站&#xff0c;各有优缺点。 1、AI Plus&#xff08;稳定使用&#xff09; 推荐指数&#xff1a;⭐⭐⭐⭐⭐ yixiaai.com 该网站已经稳定运营了1年多了。2023年3月份第一批上线的网…

产品经理原型设计工具 Axure 的使用

原型设计工具 Axure 中文学习网&#xff1a;https://www.axure.com.cn/ 1、安装 2023年Axure RP9最新安装、汉化教程&#xff08;附带安装包下载&#xff09; 2、基本使用 Axure rp9入门图文教程——基操及介绍&#xff08;看完就能上手&#xff0c;人人都是产品经理&#x…

Thymeleaf+Bootstrap封装分页组件

效果 代码 templates/components/pagination.html <!doctype html> <html lang"zh-CN" xmlns:th"http://www.thymeleaf.org"> <body> <div class"d-flex justify-content-between align-items-center mb-3" th:fragment&…

【C++】string类:模拟实现(适合新手的手撕string)

上次介绍了标准库里的string类以及常用接口&#xff1a;【C】String类&#xff1a;标准库介绍-CSDN博客 本次就来亲自动手来模拟实现下 目录 一.基本结构 二.构造函数&#xff08;constructor&#xff09; 1.构造函数 2.拷贝构造 3.c_str() 三.析构函数&#xff08;destr…

linux PXE批量网络装机及Kickstart无人值守安装

目录 一、PXE基本概述 1.1 什么是PXE 1.2 PXE批量部署的优点 1.3 PXE部署的前置条件 二、部署PXE远程安装服务器 2.1 安装并启动TFTP服务 2.2 安装并启动DHCP服务 2.3 准备linux内核、初始化镜像文件 2.4 准备PXE引导程序 2.5 安装FTP服务&#xff0c;准备CentOS 7 安…

Solidworks 创建工程图纸,工程图纸不显示解决

当完成三维零件&#xff0c;制作工程图纸时&#xff0c;发现右侧“工程图图纸”不显示了&#xff0c;不能像以前那样方便的拖拽了。如下图&#xff1a; 解决办法&#xff1a; 步骤1:点击这 ...&#xff0c;打开需要的三维图文件&#xff0c;如“公头主体” 步骤2&#xff1a;…

VisualStudio|开发环境相关技巧及问题

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 本节继续学习VisualStudio相关内容&#xff0c;以前学习都是以能用为主&#xff0c;没有系统的学习&#xff0c;接下来会系统的学习相关内容&#xff0c; 以下为学习笔记。 01 第三方dll调用 ①&#xff1a;如果第三…

希尔排序

希尔排序是直接排序的优化版本。 希尔排序是将庞大的数据进行分组&#xff0c;通过定义一个gap值&#xff0c;将数组里面间隔为这个gap值的元素分在一个小组里面&#xff0c;把每个小组通过插入排序的方式分别排成有序 在一组组排成有序的这个过程中&#xff0c;原来无序的数…

快速上手体验MyPerf4J监控springboot应用(docker版快速开始-本地版)

使用MyPerf4J监控springboot应用 快速启动influxdb时序数据库日志收集器telegrafgrafana可视化界面安装最终效果 项目地址 项目简介: 一个针对高并发、低延迟应用设计的高性能 Java 性能监控和统计工具。 价值 快速定位性能瓶颈快速定位故障原因 快速启动 监控本地应用 idea配…

M8020A J-BERT 高性能比特误码率测试仪

M8020A 比特误码率测试仪 J-BERT M8020A 高性能 BERT 产品综述 Keysight J-BERT M8020A 高性能比特误码率测试仪能够快速、准确地表征传输速率高达 16 或 32 Gb/s 的单通道和多通道器件中的接收机。 M8020A 综合了更广泛的功能&#xff0c;可以简化您的测试系统。 自动对信…

qiankun微前端

qiankun微前端 主项目1、安装qiankun2、main.js引入注册 二、子项目1、安装sh-winter/vite-plugin-qiankun2、main.js配置3、vite.config.js配置 三、问题解决四、一键启动 主项目 1、安装qiankun npm i qiankun -S2、main.js引入注册 import { createApp } from vue import…

健身房管理系统--论文pf

TOC springboot542健身房管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛…

C语言之字节对齐

目录 1. 引言2.字节对齐原理3.字节对齐应用4.总结 1. 引言 字节对齐属于编译器的内容&#xff0c;决定数据实际的存放方式。主要有两个作用&#xff1a;1.优化数据储存&#xff0c;减少空间浪费 2.增加数据读取速率&#xff0c;本文将于以上两点展开&#xff0c;简述字节对齐的…

VLM调研记录

Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction 北大和字节团队的一篇VLM&#xff0c;在生成任务上&#xff0c;用GPT范式&#xff0c;声称在FID上超过了DIT&#xff0c;SD3和SORA。开源。首先是multi-scale的VQVAE&#xff0c;然后是…

一起学习LeetCode热题100道(52/100)

52.腐烂的橘子(学习) 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b; 值 1 代表新鲜橘子&#xff1b; 值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返…

PHP轻创推客集淘客地推任务平台于一体的综合营销平台系统源码

&#x1f680;轻创推客&#xff0c;营销新纪元 —— 集淘客与地推任务于一体的全能平台&#x1f310; &#x1f308;【开篇&#xff1a;营销新潮流&#xff0c;轻创推客引领未来】 在瞬息万变的营销世界里&#xff0c;你还在为寻找高效、全面的营销渠道而烦恼吗&#xff1f;&…

【数据安全】数据中心数据安全整体解决方案(Doc完整版)

第一章 解决方案 1.1 建设需求 1.2 建设思路 1.3 总体方案 信息安全系统整体部署架构图 1.3.1 IP准入控制系统 1.3.2 防泄密技术的选择 1.3.3 主机账号生命周期管理系统 1.3.4 数据库账号生命周期管理系统 1.3.5 双因素认证系统 1.3.6 数据库审计系统 1.3.7 数据脱敏…