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

Elasticsearch入门之HTTP高级查询操作

前言

上一篇博客我们学习了es的一些基础操作如下:

  1. 创建索引(创建表 create table)
  2. 查看索引(查看表show tables)
  3. 查看单个索引(查看单个表show create table)
  4. 删除索引(删除表)
  5. 创建文档(插入数据)
  6. 根据唯一标识查看文档(根据主键查看一条数据)
  7. 根据唯一标识修改文档所有字段值(根据主键修改一条数据)
  8. 根据唯一标识修改文档指定字段值(根据主键修改指定字段的值)
  9. 根据唯一标识删除文档(根据主键删除对应的一条数据)
  10. 条件删除文档(根据条件删除数据)
  11. 创建映射(mysql中一般就是创建表,只不过es可以动态生成映射)
  12. 查看映射(查看表结构)

本篇我们继续学习es http的其它操作

高级查询

Elasticsearch 提供了基于 JSON 提供完整的查询 DSL 来定义查询
定义数据 :

# POST /student/_doc/1001
{
"name":"zhangsan",
"nickname":"zhangsan","sex":"男","age":30
}
# POST /student/_doc/1002
{
"name":"lisi",
"nickname":"lisi","sex":"男","age":20
}
# POST /student/_doc/1003
{
"name":"wangwu","nickname":"wangwu","sex":"女","age":40
}
# POST /student/_doc/1004
{
"name":"zhangsan1",
"nickname":"zhangsan1","sex":"女","age":50
}
# POST /student/_doc/1005
{
"name":"zhangsan aa",
"nickname":"zhangsan2","sex":"女","age":30
}

我们先根据上面的数据,用自定义的id给student索引中插入文档:
在这里插入图片描述
其它文档操作类似,这里就不截图展示了。

  1. 查询所有文档(类似于查询表中所有数据:select * from table)

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{"query": {"match_all": {}}
}
# "query":这里的 query 代表一个查询对象,里面可以有不同的查询属性
# "match_all":查询类型,例如:match_all(代表查询所有), match,term , range 等等
# {查询条件}:查询条件会根据类型的不同,写法也有差异

在这里插入图片描述
服务器响应结果如下:
在这里插入图片描述
在这里插入图片描述
这里就展示一部分数据。

{"took【查询花费时间,单位毫秒】" : 1116,"timed_out【是否超时】" : false,"_shards【分片信息】" : {"total【总数】" : 1,"successful【成功】" : 1,"skipped【忽略】" : 0,"failed【失败】" : 0},"hits【搜索命中结果】" : {"total"【搜索条件匹配的文档总数】: {"value"【总命中计数的值】: 3,"relation"【计数规则】: "eq" # eq 表示计数准确, gte 表示计数不准确},"max_score【匹配度分值】" : 1.0,"hits【命中结果集合】" : [。。。}]}
}
  1. 匹配查询

match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

在这里插入图片描述
服务器响应结果为:(篇幅原因这里json就不格式化了)
在这里插入图片描述

这里特别要注意,不同的es版本对于分词的处理也不同,我们可以看到zhangsan1并没有查出来,但是zhangsan aa查出来了,说明本次并没有把zhangsan1拆分出zhangsan来,因此查不出来。

  1. 字段匹配查询

multi_match 与 match 类似,不同的是它可以在多个字段中查询。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search
在这里插入图片描述
服务器响应结果:
在这里插入图片描述

  1. 关键字精确查询(类似于:select * from table where name = ‘zhangsan’)
    term 查询,精确的关键词匹配查询,不对查询条件进行分词。
    在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search
{"query": {"term": {"name": {"value": "zhangsan"}}}
}

在这里插入图片描述
服务器响应结果:
在这里插入图片描述
5. 多关键字精确查询(类似于:select * from table where name in (‘zhangsan’,‘lisi’))
terms 查询和 term 查询一样,但它允许你指定多值进行匹配。
如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件,类似于 mysql 的 in
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{"query": {"terms": {"name": ["zhangsan","lisi"]}}
}

在这里插入图片描述
服务器响应结果:
在这里插入图片描述
6. 指定查询字段(类似于:select name,nickname from table where nickname = ‘zhangsan’)
默认情况下,Elasticsearch 在搜索的结果中,会把文档中保存在_source 的所有字段都返回。
如果我们只想获取其中的部分字段,我们可以添加_source 的过滤
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{"_source": ["name","nickname"],"query": {"terms": {"nickname": ["zhangsan"]}}
}

在这里插入图片描述
服务器响应结果:
在这里插入图片描述
7. 过滤字段(还是类似与select 指定的字段)
我们也可以通过:

  • includes:来指定想要显示的字段(这个和上面一样,只不过上面是把includes忽略了)
  • excludes:来指定不想要显示的字段(这个在mysql中并没有类似的,一般mysql想选择什么字段,需要一个一个些出来,感觉用处是有,但没有那么大)

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{"_source": {"includes": ["name","nickname"]},"query": {"terms": {"nickname": ["zhangsan"]}}
}

服务器响应结果:
在这里插入图片描述
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{"_source": {"excludes": ["name","nickname"]},"query": {"terms": {"nickname": ["zhangsan"]}}
}

在这里插入图片描述
服务器响应结果:
在这里插入图片描述
8. 组合查询
bool把各种其它查询通过must(必须 )、must_not(必须不)、should(应该)的方式进行组合

  • must
    含义:所有包含在 must 数组中的查询条件都必须为真(即所有条件都必须满足),文档才会被返回。
    等价逻辑运算符:AND
    应用场景:当你需要确保多个条件同时成立时使用。
    假设你想查找姓名中包含“shangsan”并且nickname是“zhangsan”的学生,可以这样写:
{"query": {"bool": {"must": [{"match": {"name": "zhangsan"}},{"match": {"nickname": "zhangsan"}}]}}
}
  • must_not
    含义:所有包含在 must_not 数组中的查询条件都必须为假(即这些条件都不能满足),文档才会被返回。
    等价逻辑运算符:NOT
    应用场景:当你想要排除某些特定条件时使用。
    如果你想查找name中包含“zhangsan”,但nickname不是“lisi”的学生,可以这样写:
{"query": {"bool": {"must": [{"match": {"name": "zhangsan"}}],"must_not": [{"match": {"nickname": "lis"}}]}}
}
  • should
    含义:should 数组中的查询条件至少有一个为真即可(即满足任意一个条件即可),文档就会被返回。你可以通过设置 minimum_should_match 参数来指定最少需要满足的条件数量。
    等价逻辑运算符:OR
    应用场景:当你希望满足任意一个或多个条件时使用。
    如果你想查找name中包含“zhangsan”或nickname是“zhangsan1”的学生,可以这样写:
{"query": {"bool": {"should": [{"match": {"name": "zhangsan"}},{"match": {"nickname": "zhangsan1"}}]}}
}

当然可以组合查询:在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{"query": {"bool": {"must": [{"match": {"name": "zhangsan"}}],"must_not": [{"match": {"nickname": "lisi"}}]}}
}

在这里插入图片描述
服务器响应结果:
在这里插入图片描述

  1. 范围查询

range 查询找出那些落在指定区间内的数字或者时间。range 查询允许以下字符
在这里插入图片描述
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{"query": {"range": {"age": {"gte": 30,"lte": 35}}}
}

报错了:Cannot search on field [age] since it is not indexed
在这里插入图片描述

根据上一篇博客,我们知道index一旦为false,那么就不能用来查询,所以我们看看age字段的index是不是为false:
在这里插入图片描述
果不其然,这就是上篇博客说的动态映射的缺点了,我们需要更改一下映射,更改索引的方法看下面修改索引,我们临时修改改了一个名字叫tmp_student的索引,修改完后我们再次执行
在这里插入图片描述
服务器响应结果:
在这里插入图片描述
10. 模糊查询(相当于sql中的select * from table where name like ‘%zhangsan%’)
返回包含与搜索字词相似的字词的文档。
编辑距离是将一个术语转换为另一个术语所需的一个字符更改的次数。这些更改可以包括:

  • 更改字符(box → fox)
  • 删除字符(black → lack)
  • 插入字符(sic → sick)
  • 转置两个相邻字符(act → cat)

为了找到相似的术语,fuzzy 查询会在指定的编辑距离内创建一组搜索词的所有可能的变体
或扩展。然后查询返回每个扩展的完全匹配。
通过 fuzziness 修改编辑距离。一般使用默认值 AUTO,根据术语的长度生成编辑距离。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{"query": {"fuzzy": {"name": {"value": "zhangsan"}}}
}

在这里插入图片描述

服务器响应结果:
在这里插入图片描述

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{"query": {"fuzzy": {"name": {"value": "zhangsan","fuzziness": 2}}}
}

在这里插入图片描述
fuzziness设置为2,
服务器响应结果:
在这里插入图片描述

  1. 单字段排序

sort 可以让我们按照不同的字段进行排序,并且通过 order 指定排序的方式。desc 降序,asc
升序。
我们现在索引中name为zhangsan相关的两个年龄都为30,我们再插入一条数据方便进行排序测试:
在这里插入图片描述

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/tmp_student/_search

{"query": {"match": {"name": "zhangsan"}},"sort": [{"age": {"order": "desc"}}]
}

在这里插入图片描述

服务器响应结果:

在这里插入图片描述
12. 多字段排序
假定我们想要结合使用 age 和 _id 进行查询,并且匹配的结果首先按照年龄排序,然后
按照id排序
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{"query": {"match_all": {}},"sort": [{"age": {"order": "desc"}},{"_id": {"order": "desc"}}]
}

在这里插入图片描述
13. 高亮查询
在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮。
在这里插入图片描述
Elasticsearch 可以对查询内容中的关键字部分,进行标签和样式(高亮)的设置。
在使用 match 查询的同时,加上一个 highlight 属性:

  • pre_tags:前置标签
  • post_tags:后置标签
  • fields:需要高亮的字段
  • title:这里声明 title 字段需要高亮,后面可以为这个字段设置特有配置,也可以空

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/tmp_student/_search

{"query": {"match": {"name": "zhangsan"}},"highlight": {"pre_tags": "<font color='red'>","post_tags": "</font>","fields": {"name": {}}}
}

在这里插入图片描述
14. 分页查询
from:当前页的起始索引,默认从 0 开始。 from = (pageNum - 1) * size
size:每页显示多少条
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/tmp_student/_search

{"query": {"match_all": {}},"sort": [{"age": {"order": "desc"}}],"from": 0,"size": 2
}

在这里插入图片描述
15. 聚合查询
聚合允许使用者对 es 文档进行统计分析,类似与关系型数据库中的 group by,当然还有很多其他的聚合,例如取最大值、平均值等等。

  • 对某个字段取最大值 max
    在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/tmp_student/_search
{"aggs": {"max_age": {"max": {"field": "age"}}},"size": 0
}

在这里插入图片描述

  • 对某个字段取最小值 min
    在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/tmp_student/_search
{"aggs": {"min_age": {"min": {"field": "age"}}},"size": 0
}

在这里插入图片描述

  • 对某个字段求和 sum
    在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/tmp_student/_search
{"aggs": {"sum_age": {"sum": {"field": "age"}}},"size": 0
}

在这里插入图片描述

  • 对某个字段取平均值 avg
{"aggs": {"avg_age": {"avg": {"field": "age"}}},"size": 0
}

在这里插入图片描述

  • 对某个字段的值进行去重之后再取总数
    在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/tmp_student/_search
{"aggs": {"distinct_age": {"cardinality": {"field": "age"}}},"size": 0
}

在这里插入图片描述

  • State 聚合
    stats 聚合,对某个字段一次性返回 count,max,min,avg 和 sum 五个指标
    在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/tmp_student/_search
{"aggs": {"stats_age": {"stats": {"field": "age"}}},"size": 0
}

在这里插入图片描述
16. 桶聚合查询
桶聚和相当于 sql 中的 group by 语句

  • terms 聚合,分组统计
    在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/tmp_student/_search
{"aggs": {"age_groupby": {"terms": {"field": "age"}}},"size": 0
}

在这里插入图片描述

  • 在 terms 分组下再进行聚合
    在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/tmp_student/_search
{"aggs": {"age_groupby": {"terms": {"field": "age"}}},"size": 0
}

在这里插入图片描述

修改索引

在es中,是不支持更改现有字段的映射或字段类型的,如果我们非得需要更改字段的类型,怎么办,数据迁移,重建索引,建立我们想要的正确的映射规则;

  1. 查看旧的索引
    在这里插入图片描述
{"student": {"mappings": {"properties": {"age": {"type": "long","index": false},"name": {"type": "text"},"nickname": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"sex": {"type": "text","index": false}}}}
}
  1. 创建新的索引
    在这里插入图片描述
{"mappings": {"properties": {"age": {"type": "long","index": true},"name": {"type": "text"},"nickname": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"sex": {"type": "text","index": false}}}
}
  1. 数据迁移
    在这里插入图片描述
{"source": {"index": "student"},"dest": {"index": "tmp_student"}
}

match和term

当然可以。match 查询和 term 查询在 Elasticsearch 中确实有不同的行为,特别是在处理分析(分词)和全文搜索方面。下面通过具体的例子来说明它们之间的区别。

示例场景:图书索引

假设你有一个包含书籍信息的索引 books,每个文档代表一本书,并且有以下字段:

  • title: 书名,类型为 text,并且默认包含一个 keyword 子字段 title.keyword
  • author: 作者名,类型为 text,并且默认包含一个 keyword 子字段 author.keyword
示例数据
idtitleauthor
1Elasticsearch GuideJohn Doe
2Learning ElasticsearchJane Smith
3Mastering ElasticsearchJohn Doe-Smith
4Elasticsearch BasicsJohn Doe Jr.
使用 match 查询

match 查询会分析查询字符串,并尝试匹配文档中的相应词条。这使得它可以用于全文搜索,支持部分匹配和模糊匹配。

示例查询:查找包含 “elasticsearch” 的书籍
GET /books/_search
{"query": {"bool": {"must": [{"match": {"title": "elasticsearch"}}]}}
}

这段查询会返回所有标题中包含词条 "elasticsearch" 的书籍,例如:

  • id: 1 - “Elasticsearch Guide”
  • id: 2 - “Learning Elasticsearch”
  • id: 3 - “Mastering Elasticsearch”
  • id: 4 - “Elasticsearch Basics”

这是因为 match 查询会对查询字符串 "elasticsearch" 进行分析,并将其视为单个词条来匹配。

示例查询:查找作者名为 “John Doe” 的书籍
GET /books/_search
{"query": {"bool": {"must": [{"match": {"author": "John Doe"}}]}}
}

这段查询会返回所有作者名中包含词条 "john""doe" 的书籍,例如:

  • id: 1 - “John Doe”
  • id: 3 - “John Doe-Smith”
  • id: 4 - “John Doe Jr.”

这是因为 match 查询会对查询字符串 "John Doe" 进行分析,并将它分解为两个词条 "john""doe" 来匹配。

使用 term 查询

term 查询不会对查询字符串进行任何分析或分词,而是直接将整个值作为单个词条来查找。这意味着它适合用于精确匹配,如用户ID、状态码、类别名称等。

示例查询:查找标题恰好为 “Elasticsearch Guide” 的书籍
GET /books/_search
{"query": {"bool": {"must": [{"term": {"title.keyword": "Elasticsearch Guide"}}]}}
}

这段查询只会返回 id: 1 的那本书,因为它完全匹配了给定的字符串。

示例查询:查找作者名为 “John Doe” 的书籍
GET /books/_search
{"query": {"bool": {"must": [{"term": {"author.keyword": "John Doe"}}]}}
}

这段查询只会返回 id: 1 的那本书,因为它完全匹配了给定的字符串 "John Doe"id: 3id: 4 的书籍不会被返回,因为它们的作者名不完全匹配。

关键区别总结
  • match 查询

    • 分析:对查询字符串进行分析(分词),然后匹配包含这些词条的文档。
    • 应用场景:适用于全文搜索,支持部分匹配和模糊匹配。
    • 示例:查询 "John Doe" 可能返回包含 "John", "Doe", "John Doe-Smith", "John Doe Jr." 等文档。
  • term 查询

    • 不分析:不进行分析,直接匹配完整词条。
    • 应用场景:适用于精确匹配,如用户ID、状态码、类别名称等。
    • 示例:查询 "John Doe" 只会返回完全匹配 "John Doe" 的文档。
总结

match 查询和 term 查询在 Elasticsearch 中有着不同的用途和行为:

  • match 查询 更适合用于全文搜索,支持分析和部分匹配,适用于 text 类型的字段。
  • term 查询 更适合用于精确匹配,不涉及分析过程,适用于 keyword 类型的字段。

通过正确理解和选择 matchterm 查询,你可以构建更加高效和准确的查询逻辑。如果你需要进行全文搜索,请使用 match 查询;如果你需要进行精确匹配,请使用 term 查询并针对 keyword 字段。

模糊匹配(类似于sql中的like)

如果你希望查询能够匹配部分相似的字段,可以考虑以下几种方法:

1. 使用 wildcard 查询

wildcard 查询允许你使用通配符模式来进行模糊匹配。你可以用 * 表示任意数量的字符:

{"query": {"bool": {"must": [{"wildcard": {"name": "zhangsan*"}}]}}
}

这种方法适用于前缀匹配,但它可能比 match 查询更慢,特别是在大数据集上。

2. 使用 prefix 查询

prefix 查询用于查找以指定字符串开头的所有文档:

{"query": {"bool": {"must": [{"prefix": {"name": "zhangsan"}}]}}
}

这将返回所有 name"zhangsan" 开头的文档。

3. 使用 fuzzy 查询

fuzzy 查询允许一定范围内的编辑距离(Levenshtein 距离),从而实现模糊匹配:

{"query": {"bool": {"must": [{"match": {"name": {"query": "zhangsan","fuzziness": "AUTO"}}}]}}
}

这将返回与 "zhangsan" 接近的名称,包括拼写错误或其他轻微变化。

4. 使用 keyword 子字段进行精确匹配或前缀匹配

如果你希望进行精确匹配或者基于原始值的前缀匹配,可以利用 name.keyword 子字段(假设你已经在映射中定义了这个子字段):

{"query": {"bool": {"must": [{"prefix": {"name.keyword": "zhangsan"}}]}}
}

这种方法确保了查询不会受到分析器的影响,提供了更精确的匹配。

总结

match 查询的行为是基于词条匹配的,而不是基于整个字符串的精确匹配。因此,它只会返回那些明确包含查询词条的文档。如果你想匹配部分相似的名字,可以考虑使用 wildcardprefixfuzzy 查询,或者直接针对 keyword 子字段进行查询。选择哪种方法取决于你的具体需求和性能考虑。

如果你的目标是实现类似于 MySQL LIKE 的前缀匹配行为,prefixwildcard 查询通常是更好的选择。

相关文章:

Elasticsearch入门之HTTP高级查询操作

前言 上一篇博客我们学习了es的一些基础操作如下&#xff1a; 创建索引&#xff08;创建表 create table&#xff09;查看索引&#xff08;查看表show tables&#xff09;查看单个索引&#xff08;查看单个表show create table&#xff09;删除索引&#xff08;删除表&#x…...

Java基础-异常

异常 什么是异常 在实际工作中&#xff0c;遇到的情况不可能是非常完美的。比如&#xff1a;你写一个模块&#xff0c;用户输入不一定符合你的要求、你的程序要打开某个文件&#xff0c;这个文件可能不存在或者文件格式不对&#xff0c;你要读取数据库的数据&#xff0c;数据…...

鲲鹏麒麟使用Docker部署Redis5

本次部署采用Docker方式进行部署&#xff0c;服务器为鲲鹏服务器&#xff0c;CPU架构为ARM64&#xff0c;操作系统版本信息为 # cat /etc/kylin-release Kylin Linux Advanced Server release V10 (Tercel)镜像 下载镜像鲲鹏麒麟Redis5镜像包 部署 1、上传镜像到服务器 2、…...

家政项目小程序+ssm

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了微信小程序家政项目小程序的开发全过程。通过分析微信小程序家政项目小程序管理的不足&#xff0c;创建了一个计算机管理微信小程序家政项目小程序的方案。文章…...

Day7 苍穹外卖项目 缓存菜品、SpringCache框架、缓存套餐、添加购物车、查看购物车、清空购物车

目录 1.缓存菜品 1.1 问题说明 1.2 实现思路 1.3 代码开发 1.3.1 加入缓存 1.3.2 清除缓存 1.3.2.1 新增菜品优化 1.3.2.2 菜品批量删除优化 1.3.2.3 修改菜品优化 1.3.2.4 菜品起售停售优化 1.4 功能测试 1.4.1 加入缓存 1.4.2 菜品修改 1.5 代码提交 2.缓存套餐 2.1 Spring C…...

天天 AI-241207:今日热点- Windsurf:在工程能力上进一步进化的Cursor

2AGI.NET | 探索 AI 无限潜力&#xff0c;2AGI 为您带来最前沿资讯。 Windsurf&#xff1a;在工程能力上进一步进化的Cursor 介绍了一个新的AI代码编辑器Windsurf&#xff0c;它被认为是Cursor的进化版&#xff0c;具有更强的工程能力。文章强调了Windsurf在自动化编码和系统…...

Windows远程桌面连接到Linux

我的电脑是一台瘦客户端&#xff0c;公司设置的不能安装其他软件&#xff0c;里面只有几个软件&#xff0c;还好有一个远程桌面&#xff08;Remote Desktop Connection&#xff09;&#xff0c;我想连接到另一台Linux的电脑上。 在Linux上安装xrdp&#xff1a; sudo apt insta…...

使用前,后端写 具有分页效果的数据展示

目录 前言 效果展示图如下 思路 服务器从前端界面获得什么&#xff1f; 前端界面从后端服务器应该拿到什么&#xff1f; 使用的技术 代码 前端代码 list.jsp中该功能的实现代码 后端代码 对应的servlet 代码 实体类代码 service的实现层 实现该功能的代码 dao层 实…...

ubuntu防火墙管理(六)——ebtables

ebtables 是一个用于管理以太网帧的防火墙工具&#xff0c;主要用于在数据链路层&#xff08;第 2 层&#xff09;过滤和控制网络流量。它类似于 iptables&#xff0c;但专注于以太网流量。以下是 ebtables 的基本使用方法和示例。 基本命令 ebtables 的基本命令格式如下&…...

Oracle开发和应用——常用对象(表)

6.5. 常用对象 6.5.1. 表 1)概念 表(Table),是关系库中最基本、也是最常用的数据库对象,用户的数据存储在表中,用户使用数据时可以随时通过表进行检索或操作。也可以说,表是关系库最基本、最根本的特征。我们可以通过查询系统视图来获取表的相关信息。 D:\> sqlp…...

嵌入式蓝桥杯学习8 模拟电压测量

这里本来是要讲输入捕获的知识点的&#xff0c;但是由于学校校赛时间比较紧&#xff0c;校赛没考到输入捕获&#xff0c;所以先写ADC模拟电压测量的知识点。这里将的是单通道阻塞式采样。 Cubemx配置 点开cubemx。 1.将PB15配置为ADC2-IN15。 2.在Analog中点击ADC2&#xff…...

FFmpeg源码中,计算CRC校验的实现

一、CRC简介 CRC(Cyclic Redundancy Check)&#xff0c;即循环冗余校验&#xff0c;是一种根据网络数据包或电脑文件等数据产生简短固定位数校核码的快速算法&#xff0c;主要用来检测或校核数据传输或者保存后可能出现的错误。CRC利用除法及余数的原理&#xff0c;实现错误侦…...

Android笔记【14】结合LaunchedEffect实现计时器功能。

一、问题 cy老师第五次作业 结合LaunchedEffect实现计时器功能。要求&#xff1a;动态计时&#xff0c;每秒修改时间&#xff0c;计时的时间格式为“00&#xff1a;00&#xff1a;00”&#xff08;小时&#xff1a;分钟&#xff1a;秒&#xff09;提交源代码的文本和运行截图…...

kubectl 和 kubeconfig 基本原理

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列 快捷连接 Kubernetes架构原则和对象设计&#xff08;一&#xff09; 本文介绍kubectl的几个常用命令&#xff0c;kubconfig文件基本属性&#xff0c;并开启kubectl debug日志分析其背后基本原理 …...

LVGL笔录----动画

最近在搞LVGL动画内容&#xff0c;发现网上能参考的资源太少了。现将自己学习到的内容做个笔录&#xff0c;仅供自己记录&#xff0c;若对你有帮助&#xff0c;那么最好不过&#xff0c;共勉&#xff01; 首先&#xff0c;我是在CodeBlock上仿真 #define PI 3.14159265359stat…...

【LeetCode热题100】BFS解决FloodFill算法

这篇博客主要记录了使用BFS解决FloodFill算法的几道题目&#xff0c;包括图像渲染、岛屿数量、岛屿的最大面积、被包围的区域。 class Solution {using PII pair<int, int>; public:vector<vector<int>> floodFill(vector<vector<int>>& im…...

设计模式の软件设计原则

文章目录 前言一、聚合&组合&继承&依赖1.1、继承1.2、组合1.3、聚合1.4、依赖 二、单一职责原则2.1、单一职责原则反面案例2.2、单一职责原则反面案例的改进 三、接口隔离原则3.1、接口隔离原则反面案例3.2、接口隔离原则反面案例的改进 四、依赖倒转原则4.1、依赖…...

Linux centos7 下载MySQL5.7仓库的命令

wget 是一个非常强大的命令行工具&#xff0c;用于从网络上下载文件。它是 Linux 和其他 Unix-like 系统中常用的工具之一。wget 命令的各个参数有着不同的含义&#xff0c;下面是您提供的命令 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.onarch.r…...

CSS flex布局踩坑小记:flex-basis属性之0px与0%的差异 (赞)

原文出处&#xff1a;CSS flex布局踩坑小记&#xff1a;flex-basis属性之0px与0%的差异_flex-basis 0%-CSDN博客 讲述flex容器被撑大的原因(误用&#xff1a;flex-basis: 0%;)及解决方法(用&#xff1a;flex-basis: 0px;)...

华硕主板不能开启

正常流程&#xff1a; [主機板]BIOS如何設置主機板整合圖形(內顯)和獨立顯示卡同時顯示輸出 | 官方支援 | ASUS 台灣 如果开启了CSR兼容性模式&#xff0c;在BIOS里面&#xff0c;就必须关掉&#xff0c;才能支持多显示器&#xff0c;如下图显示的标识才会出现。...

室联人形机器人:家政服务任务结构化、技术要点、深入应用FPGA的控制系统框架设计(整合版)

目录&#xff1a; 0 引言 1 人形机器人对室内家政服务任务的结构化 1.1人形机器人在室内家政服务中的比较优势 1.1.1 人形机器人拟人性的7个维度 1.1.2 拟人性在室内家政服务工作中的比较优势 1.1.3 潜在的重要用户&#xff1a;宠物爱好者 1.2 居所室内环境的特征与结构…...

OpenAI 发布 o1 LLM,推出 ChatGPT Pro

OpenAI正式发布了专为复杂推理而构建的 OpenAI o1大型语言模型(LLM)。 该公司还推出了 ChatGPT Pro&#xff0c;这是一项每月 200 美元的套餐&#xff0c;包括无限制访问 OpenAI o1、o1-mini、GPT-4o 和高级语音对话。 OpenAI o1 从 9 月 12 日起在 ChatGPT 中推出预览版&…...

【MySQL】存储过程和触发器

MySQL存储过程和触发器 一、存储过程的介绍二、存储过程的相关操作2.1创建存储过程2.2查看存储过程2.4调用存储过程2.5删除存储过程 三、变量3.1系统变量3.2用户定义变量3.3局部变量 四、存储过程中的关键字4.1 if4.2参数4.3case4.4 while4.5repeat4.6 loop4.7游标4.8条件处理程…...

QT4和 QT5 槽函数连接的区别

正常连接方式 //QT4官方用列QLabel *label new QLabel;QScrollBar *scrollBar new QScrollBar;QObject::connect(scrollBar, SIGNAL(valueChanged(int)),label, SLOT(setNum(int)));//QT5官方用列QLabel *label new QLabel;QLineEdit *lineEdit new QLineEdit;QObject::c…...

使用 PyTorch 和 Horovod 来编写一个简单的分布式训练 demo

使用 PyTorch 和 Horovod 来编写一个简单的分布式训练 demo&#xff0c;可以帮助你理解如何在多GPU或多节点环境中高效地训练深度学习模型。Horovod 是 Uber 开发的一个用于分布式训练的框架&#xff0c;它支持 TensorFlow、Keras、PyTorch 等多个机器学习库。下面是一个基于 P…...

SQL复杂查询功能介绍及示例

文章目录 1. 多表连接&#xff08;JOIN&#xff09;功能介绍应用场景示例查询及初始表格customers 表&#xff08;未查询前&#xff09;orders 表&#xff08;未查询前&#xff09;INNER JOIN 示例LEFT JOIN 示例 2. 子查询&#xff08;Subquery&#xff09;功能介绍应用场景示…...

shell基础用法

shell基础知识 shell中的多行注释 :<<EOF read echo $REPLY # read不指定变量&#xff0c;则默认写入$REPLY EOF # :<<EOF ...EOF 多行注释&#xff0c;EOF可以替换为&#xff01;# 等文件目录和执行目录 echo $0$0 # ./demo.sh echo $0的realpath$(realpath…...

C#设计模式--策略模式(Strategy Pattern)

策略模式是一种行为设计模式&#xff0c;它使你能在运行时改变对象的行为。在策略模式定义了一系列算法或策略&#xff0c;并将每个算法封装在独立的类中&#xff0c;使得它们可以互相替换。通过使用策略模式&#xff0c;可以在运行时根据需要选择不同的算法&#xff0c;而不需…...

【opencv入门教程】15. 访问像素的十四种方式

文章选自&#xff1a; 一、像素访问 一张图片由许多个点组成&#xff0c;每个点就是一个像素&#xff0c;每个像素包含不同的值&#xff0c;对图像像素操作是图像处理过程中常使用的 二、访问像素 void Samples::AccessPixels1(Mat &image, int div 64) {int nl imag…...

【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)

导航&#xff1a; 本文一些内容需要聚簇索引、非聚簇索引、B树、覆盖索引、索引下推等前置概念&#xff0c;虽然本文有简单回顾&#xff0c;但详细可以参考下文的【MySQL高级篇】 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/谷粒商城/学成在线设计模…...