Elasticsearch入门之HTTP高级查询操作
前言
上一篇博客我们学习了es的一些基础操作如下:
- 创建索引(创建表 create table)
- 查看索引(查看表show tables)
- 查看单个索引(查看单个表show create table)
- 删除索引(删除表)
- 创建文档(插入数据)
- 根据唯一标识查看文档(根据主键查看一条数据)
- 根据唯一标识修改文档所有字段值(根据主键修改一条数据)
- 根据唯一标识修改文档指定字段值(根据主键修改指定字段的值)
- 根据唯一标识删除文档(根据主键删除对应的一条数据)
- 条件删除文档(根据条件删除数据)
- 创建映射(mysql中一般就是创建表,只不过es可以动态生成映射)
- 查看映射(查看表结构)
本篇我们继续学习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索引中插入文档:
其它文档操作类似,这里就不截图展示了。
- 查询所有文档(类似于查询表中所有数据: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【命中结果集合】" : [。。。}]}
}
- 匹配查询
match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search
服务器响应结果为:(篇幅原因这里json就不格式化了)
这里特别要注意,不同的es版本对于分词的处理也不同,我们可以看到zhangsan1并没有查出来,但是zhangsan aa查出来了,说明本次并没有把zhangsan1拆分出zhangsan来,因此查不出来。
- 字段匹配查询
multi_match 与 match 类似,不同的是它可以在多个字段中查询。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search
服务器响应结果:
- 关键字精确查询(类似于: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"}}]}}
}
服务器响应结果:
- 范围查询
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,
服务器响应结果:
- 单字段排序
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中,是不支持更改现有字段的映射或字段类型的,如果我们非得需要更改字段的类型,怎么办,数据迁移,重建索引,建立我们想要的正确的映射规则;
- 查看旧的索引
{"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}}}}
}
- 创建新的索引
{"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}}}
}
- 数据迁移
{"source": {"index": "student"},"dest": {"index": "tmp_student"}
}
match和term
当然可以。match
查询和 term
查询在 Elasticsearch 中确实有不同的行为,特别是在处理分析(分词)和全文搜索方面。下面通过具体的例子来说明它们之间的区别。
示例场景:图书索引
假设你有一个包含书籍信息的索引 books
,每个文档代表一本书,并且有以下字段:
title
: 书名,类型为text
,并且默认包含一个keyword
子字段title.keyword
。author
: 作者名,类型为text
,并且默认包含一个keyword
子字段author.keyword
。
示例数据
id | title | author |
---|---|---|
1 | Elasticsearch Guide | John Doe |
2 | Learning Elasticsearch | Jane Smith |
3 | Mastering Elasticsearch | John Doe-Smith |
4 | Elasticsearch Basics | John 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: 3
和 id: 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
类型的字段。
通过正确理解和选择 match
和 term
查询,你可以构建更加高效和准确的查询逻辑。如果你需要进行全文搜索,请使用 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
查询的行为是基于词条匹配的,而不是基于整个字符串的精确匹配。因此,它只会返回那些明确包含查询词条的文档。如果你想匹配部分相似的名字,可以考虑使用 wildcard
、prefix
、fuzzy
查询,或者直接针对 keyword
子字段进行查询。选择哪种方法取决于你的具体需求和性能考虑。
如果你的目标是实现类似于 MySQL LIKE
的前缀匹配行为,prefix
或 wildcard
查询通常是更好的选择。
相关文章:
Elasticsearch入门之HTTP高级查询操作
前言 上一篇博客我们学习了es的一些基础操作如下: 创建索引(创建表 create table)查看索引(查看表show tables)查看单个索引(查看单个表show create table)删除索引(删除表&#x…...
前端知识1html
VScode一些快捷键 Ctrl/——注释 !——生成html框架元素 *n——生成n个标签 直接书写html的名字回车生成对应的标签 常见标签 span: <span style"color: red;">hello</span> <span>demo</span> span实现: 标题…...
《黑神话:悟空》闪退,提示D3D12崩溃,游戏崩溃无法启动是什么原因?要怎么解决?
《黑神话:悟空》闪退、D3D12崩溃及游戏无法启动:原因、解决方案与预防措施 作为一名软件开发从业者,我深知电脑游戏运行时可能遇到的各种问题,尤其是像《黑神话:悟空》这样的高品质游戏,其对硬件和系统配置…...
[GESP202312 五级] 烹饪问题
题目传送门 B3930 [GESP202312 五级] 烹饪问题 题目描述 有 N N N 种食材,编号从 0 0 0 至 N − 1 N-1 N−1,其中第 i i i 种食材的美味度为 a i a_i ai。 不同食材之间的组合可能产生奇妙的化学反应。具体来说,如果两种食材的美味…...
[代码随想录10]栈和队列
前言 栈和队列在STL中扮演的什么角色呢?我们知道STL的六大组件是:容器,适配器,算法,迭代器,空间配置器,仿函数,而我们今天要学的栈和队列就是属于适配器里面的,为什么栈和…...
TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面
前言 前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用。但在日常使用过程中,命令行使用还是不太方便的,因此今天介绍一下如何使用WPF/C#构建TesseractOCR简单易用的用户界面。 普通用户使用 参照上一篇教…...
Java、JavaWeb、数据库-图书管理系统
这一章主要是把上一章写在网页里的java 代码从网页中分离出来,放在专门的servlet类中。每一个servlet类对应一个数据库的表。 规范性问题: 1、dao包存放有关数据库的信息:BaseDao包就放数据库加载驱动和增删改和关闭资源;而其他…...
轻量化特征融合 | YOLOv8 引入一种基于增强层间特征相关性的轻量级特征融合网络 | 北理工新作
本改进已同步到Magic框架 摘要—无人机图像中的小目标检测由于分辨率低和背景融合等因素具有挑战性,导致特征信息有限。多尺度特征融合可以通过捕获不同尺度的信息来增强检测,但传统策略效果不佳。简单的连接或加法操作无法充分利用多尺度融合的优势,导致特征之间的相关性不…...
U盘文件乱码:原因、恢复、预防与总结
U盘文件乱码现象解析 U盘作为我们日常生活中常用的便携式存储设备,时常会遭遇文件乱码的问题。这种乱码现象通常表现为文件名变成一堆无意义的字符,文件内容无法正常查看,甚至文件根本无法被打开。当我们在电脑上插入U盘,准备查看…...
OpenStack介绍
OpenStack概述 OpenStack是一个开源的云计算管理平台软件,主要用于构建和管理云计算环境。它允许企业或组织通过数据中心的物理服务器创建和管理虚拟机、存储资源和网络等云计算服务。其核心组件包括计算(Nova)、网络(Neutron)、存储(Cinder、Swift)等。这些组件相互协作…...
OpenGL编译用户着色器shader
shader相信很多朋友们都听说过,shader就是运行再GPU上的程序。虽然是这么说,但是我们发现,很多IDE开发工具比如说visual studio 没有办法直接去运行shader代码。这是因为,许多编译器不会自动将shader文件编译成可执行的代码然后发…...
C++ 已经知道,中序和后序,推算前序的方法。
已经知道,中序和后序,推算前序的方法。 #include<iostream> using namespace std; string ldr_str,lrd_str;//中序遍历和后序遍历 void build(int l1,int r1,int l2,int r2){if(l1>r1) return ;//边界条件,说明已经没有元素了cout<<lrd_s…...
unity打包到安卓帧率降低
这个问题遇到过很多次了我的做法就是直接设置Application.targetFrameRate60 参考...
计算机网络复习——概念强化作业
物理层负责网络通信的二进制传输 用于将MAC地址解析为IP地址的协议为RARP。 一个交换机接收到一帧,其目的地址在它的MAC地址表中查不到,交换机应该向除了来的端口外的所有其它端口转发。 关于ICMP协议,下面的论述中正确的是ICMP可传送IP通信过程中出现的错误信息。 在B类网络…...
DO、DTO、VO都是干什么的?
DO、DTO、VO 是三个常见的Java 对象,它们都是用来承载数据的,但是在不同的场景下有着不同的用途. 1.DO(Domain Object):领域对象,也称为实体对象。D0 通常用于数据库表的映射,DO中包含了实体的属性以及对实体的操作方法。DO 对应…...
深入探索 Node.js:构建强大的后端应用
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
【Agent】构建智能诗歌创作系统:基于多 Agent 的协同创作实现
在探索大语言模型的创意应用过程中,我们开发了一个基于多 Agent 的智能诗歌创作系统。本文将介绍如何通过多个专业化的 Agent 协同工作,实现根据地点和天气信息自动创作诗歌的功能。 GitHub Code 项目地址 核心架构设计 1. Agent 基类设计 from pydan…...
【Git】:远程操作
目录 新建远程仓库 克隆远程仓库 向远程仓库推送 拉取远程仓库 配置 Git 忽略特殊文件 给命令配置别名 我们可以自己搭建⼀台运行 Git 的服务器,不过现阶段,为了学 Git 先搭个服务器绝对是小题大作。好在这个世界上有个叫 GitHub 的神奇的网站࿰…...
服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs࿰…...
基于python django的药材数据可视化系统的设计与实现,可对各类药材数据做一个统计分析可视化
研究背景 随着中医药文化的不断传承与发展,传统中药材的市场需求逐渐增加。然而,随着药材种类繁多、来源复杂、品质参差不齐,如何高效地管理、分析与展示中药材的相关数据,成为现代中药产业面临的重要课题。传统的药材数据管理方…...
docker及docker exec命令学习笔记
docker exec 是一个常用的 Docker 命令,允许你在已经运行的容器中执行命令或启动新的进程。以下是详细介绍和常见用法: 基本语法 docker exec [OPTIONS] CONTAINER COMMAND [ARG...]参数详解 1. CONTAINER指定目标容器的名字或容器 ID。可以通过以下命…...
【pyspark学习从入门到精通24】机器学习库_7
目录 聚类 在出生数据集中寻找簇 主题挖掘 回归 聚类 聚类是机器学习中另一个重要的部分:在现实世界中,我们并不总是有目标特征的奢侈条件,因此我们需要回归到无监督学习的范式,在那里我们尝试在数据中发现模式。 在出生数据…...
Unity 策略游戏地图上的网格是如何实现的
在Unity中实现策略游戏地图上的网格,主要涉及到地图数据的处理、地图的加载与渲染、以及玩家在地图上的移动与碰撞检测等关键步骤。以下是对这些步骤的详细解释: 一、地图数据的处理 收集地图数据:这包括地形高度、地形纹理、建筑物、树木等…...
【MySQL 进阶之路】锁详解
MySQL 锁详解 1. 锁的基本概念 锁在数据库中是用来保证数据一致性和防止并发冲突的一种机制。MySQL 中的锁可以分为不同的类型和粒度,每种锁都有特定的使用场景和特点。了解锁的类型、作用以及如何避免锁带来的问题是提升数据库性能和避免数据冲突的关键。 2. 锁…...
RK3588--解码H264(mpp-dec-h264-to-yuv-file)
1. 简介 源码下载:https://download.csdn.net/download/mao0514/90096131 本例完成H264格式文件解码,并保存为yuv格式文件。参考mpp_dec_test重写,进行了一部分精简。 瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的 通用媒体…...
解决Conda虚拟环境中pip下载包总是到base环境的问题
conda本地创建的虚拟环境使用pip安装一些包总是安装到base环境中,导致无法正确进行环境隔离,下面是一些解决办法 方法一、使用python -m pip安装 1.1、验证虚拟环境的pip版本是哪个版本,如下所示,本人的demo虚拟环境直接使用pip…...
PyCharm 中设置虚拟环境
在 PyCharm 中设置虚拟环境的步骤如下: 1. 创建新项目时设置虚拟环境 1. 打开 PyCharm 并选择 New Project。 2. 在 Location 中指定项目路径。 3. 在右侧的 Python Interpreter 下,选择 New Environment。 Environment: 选择 Virtualenv。 Loca…...
M9484C VXG 矢量信号发生器- 110GHz-
M9484C VXG 矢量信号发生器 - 110GHz- M9484C VXG 是一款矢量信号发生器,在每个通道上提供 2.5 GHz 调制带宽,能够生成高达 54 GHz 的信号。 这款 VXG 矢量信号发生器可以组成经过校准和同步的全方位综合解决方案,帮助您更快测试下一代无线…...
机器学习详解(3):线性回归之代码详解
文章目录 1 数据预处理2 构建线性回归模型并绘制回归线初始化方法前向传播:forward_propagation代价函数:cost_function反向传播:backward_propagation参数更新:update_parameters训练方法:train代码运行结果 3 使用Py…...
工业检测基础-工业相机选型及应用场景
以下是一些常见的工业检测相机种类、检测原理、应用场景及选型依据: 2D相机 检测原理:基于二维图像捕获,通过分析图像的明暗、纹理、颜色等信息来检测物体的特征和缺陷.应用场景:广泛应用于平面工件的外观检测,如检测…...
标准状态下一个气体分子每秒平均碰撞次数的估算
要估算在标准状态(0C, 1个大气压)下,一个气体分子在1秒内与其他分子的碰撞次数,我们可以使用一些基本的物理和化学原理。这个过程涉及到气体动力学理论,特别是麦克斯韦-玻尔兹曼分布。 计算气体分子的平均速率…...
使用PHPUnit使用本地调试代替远程调试,快速提高开发效率
Laravel 是一个在 Linux 环境下表现非常出色的 PHP 框架,但它在 Windows 环境下可能会遇到一些兼容性和配置问题。为了调试或没试的方便可以在 Windows 环境下进行 Laravel PHPUnit进行本地调试和测试。 本地主要针对断点调试效果非常高效。 在 Laravel 中&#x…...
Android 镜像模式和扩展模式区别探讨-Android14
Android 镜像模式和扩展模式区别探讨 1、区分镜像模式和扩展模式1.1 扩展屏是否有显示内容1.2 镜像模式显示条件 2、镜像模式界面 同屏显示和异屏显示探讨DisplayManagerService启动及主屏添加-Android13 Android主副屏显示-Android14 1、区分镜像模式和扩展模式 LogicalDispla…...
链表头文件大更新!!!
引言 原文章:链表简介及自制链表操作头文件_自己写一个链表头文件-CSDN博客。 此次更新添加了更多功能,让改头文件更 人性化 。 安装教程见原文章。 介绍 linked_list.h 头文件 linked_list.h 是一个 C 头文件,定义了一个模板类 LinkedListÿ…...
ROS2创建 base 包用于其他模块的参数配置和头文件依赖
Demo 背景 ROS2项目开发中存在以下需求:有多个包需要读取一些共同的配置项(以txt或者yaml形式存在),且依赖于一些公用的utils工具代码(C)。Solution: 创建一个 base_config 包来“存放” 配置文件和公用的头文件。gitee address: Gitee/CDal…...
设计模式の软件设计原则
文章目录 前言一、聚合&组合&继承&依赖1.1、继承1.2、组合1.3、聚合1.4、依赖 二、单一职责原则2.1、单一职责原则反面案例2.2、单一职责原则反面案例的改进 三、接口隔离原则3.1、接口隔离原则反面案例3.2、接口隔离原则反面案例的改进 四、依赖倒转原则4.1、依赖…...
【python自动化四】日志打印
我们在进行自动化测试时,需要打印过程日志和结果日志等,这里记录下日志的相关配置。这里我们直接自己新建一个logger。 先贴上日志代码如下,可根据需要修改: import logging import os import timefrom logging.handlers import …...
E498 ThinkPHP+MYSQL+LW+纯洁婚纱网站系统的设计与实现 源码 配置 文档 全套资料
婚纱网站系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 在互联网和电子商务迅速发展的今天,网络已经是人们日常生活所不可缺少的信息获取渠道,人们日常生活基本已完全被网络所覆盖,互联网影响到各…...
【PostgreSQL系列】列类型从整数转换为 UUID
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
shell脚本实战案例
文章目录 实战第一坑功能说明脚本实现 实战第一坑 实战第一坑:在Windows系统写了一个脚本,比如上面,随后上传到服务,执行会报错 原因: 解决方案:在linux系统touch文件,并通过vim添加内容&…...
VAE为什么叫变分(variational),相对于AE有什么区别。
VAE为什么叫变分(variational),相对于AE有什么区别。 VAE为什么叫变分(variational)?VAE相对于AE有什么区别? VAE为什么叫变分(variational)? 变分自编码器&…...
Codeforces Round 991 (Div. 3)
补题连接 A. Line Breaks 思路:从头开始累加单词个数,超过m就退出。 代码: #include <bits/stdc.h> using namespace std; #define int long longvoid solve() {int n, m, k;cin >> n >> m;vector<string> a(n);…...
红日靶场vulnstark 4靶机的测试报告[细节](一)
目录 一、测试环境 1、系统环境 2、注意事项 3、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、漏洞利用Getshell ①Struts 2 s2-045漏洞 手工利用s2-45漏洞 Msf综合利用 ②Tomcat框架(CVE-2017-12615) ③phpMyAdmin(CVE-2018-12613) 构造语句写入冰蝎木…...
Android上运行OpenCV(Android Studio)
用Android Studio的话,整体来说没什么难的,照着教程来做就好了。 【OpenCV】OpenCV库的安装 - Android与OpenCV系列教程_哔哩哔哩_bilibili 主要就是导入module,然后加入依赖。代码只有几行。 if(OpenCVLoader.initLocal()){Toast.makeText(…...
代码随想录算法训练营day50|动态规划12
不同的子序列 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。、 编辑距离中的删除元素,其实就是直接变数字,其只删除原来的较长的数组里的元素 递推模拟,使用s的最后一个元素匹配,或者删除…...
图像生成-扩散模型的经典之作DDPM
论文:https://arxiv.org/pdf/2006.11239 项目:https://github.com/hojonathanho/diffusion Denoising Diffusion Probabilistic Models (DDPM) 是一种生成模型,它通过一系列逐步添加噪声的过程将数据点映射到一个简单的先验分布(…...
知识拓展 ?. 连选链操作
?. 连选链操作 ?. 可选链操作符 ?. 是可选链操作符,常用于访问引用类型具有不确定性的内部数据时,比如要访问一个对象中的数组,不确定数组一定有数据就可以使用 ? 取读取它的 length 属性,如果对象没有这个属性也仅会返回 …...
API设计指南:详解HTTP状态码错误解析、HTTP方法及参数命名规则
目录 1、HTTP API规范1.1 原则1.2 协议1.3 版本1.4 路径1.5 HTTP 方法(Method)1.6 过滤信息1.7 参数命名1.8 HTTP 状态码(Response Code)1.9 鉴权 2、状态码2.1 API返回基础规范2.2 常见的 HTTP 状态码2.3 API错误信息应该放到响应…...
【D3.js in Action 3 精译_043】5.1 饼图和环形图的创建(三):圆弧的绘制
当前内容所在位置: 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段(一)5.1.2 饼图布局生成器(二)5.1.3 圆弧的绘制(三) ✔️5.1.4 数据标签的添加(四&…...
7. 一分钟读懂“单例模式”
7.1 模式介绍 单例模式就像公司里的 打印机队列管理系统,无论有多少员工提交打印任务,大家的请求都汇总到唯一的打印管理中心,按顺序排队输出。这个中心必须全局唯一,避免多个队列出现资源冲突,保证打印任务井然有序。…...