es简单入门

在这里插入图片描述
                       星光下的赶路人star的个人主页

                      努力努力再努力

文章目录

    • 1、简介
    • 2、使用场景
    • 3、基本知识
    • 4、中文文档和官网链接
    • 5、增删改查(php代码)
    • 6、基本查询
    • 7、HTTP操作
      • 7.1 索引操作
        • 7.1.1 创建索引
      • 7.2 文档操作
        • 7.2.1 创建文档
        • 7.2.2 查看文档
        • 7.2.3 修改文档
        • 7.2.4 修改字段
        • 7.2.5 删除文档
        • 7.2.6 条件删除文档
      • 7.3 映射操作
      • 7.4 高级查询

1、简介

elasticsearch是一个开源的分布式搜索引擎,能够快速地处理大量数据,并能够实时查询,可广泛应用于实时数据分析、日志分析、企业信息发现等领域。elasticsearch提供的数据聚合功能能够变革我们对数据分析和业务理解的认识,除了实现基础的搜索外,还可以将多种聚合方式应用到搜索结果中,为我们提供有效的数据支持。elasticsearch还具备诸多便于开发、维护和优化的优势:高可扩展性、实时查询、支持多语言、自动故障转移、监控和管理工具等等。

2、使用场景

  • 全文搜索
  • 实时数据分析
  • 日志分析
  • 企业信息发现
  • 数据挖掘与探索
  • 网站搜索和统计

3、基本知识

  • elasticsearch的基本操作
  • 增删改查(Create, Retrieve, Update, Delete)操作的实现。
  • 数据类型的映射
  • elasticsearch会自动将任意数据类型映射到一个适合的内部数据类型,但是我们也可以手动指定不同字段的数据映射。
  • 索引和分析器
  • 在elasticsearch中,我们需要进行数据索引和分析操作,以便更快速、准确地进行数据查询。
  • 倒排索引
  • elasticsearch的核心功能在于倒排索引,这种数据结构能够帮助我们快速地进行全文搜索操作,同时还支持对文本的分词、过滤、改变权重等操作。

4、中文文档和官网链接

中文文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

官网:https://www.elastic.co/

5、增删改查(php代码)

//增
$params = ['index' => 'my_index','body' => ['my_field' => 'my_value','my_second_field' => 'my_second_value']
];
$response = $client->index($params);// 删
$params = ['index' => 'my_index','id' => 'my_id'
];
$response = $client->delete($params);// 改
$params = ['index' => 'my_index','id' => 'my_id','body' => ['doc' => ['my_field' => 'my_updated_value']]
];
$response = $client->update($params);// 查
$params = ['index' => 'my_index','body' => ['query' => ['match' => ['my_field' => 'my_value']]]
];
$response = $client->search($params);

6、基本查询

  • 全文搜索
  • match查询、multi_match查询等。
  • 精确匹配
  • term查询、terms查询等。
  • 范围匹配
  • range查询、geo_distance查询等。
  • 多重查询
  • bool查询、 const_score查询等。

7、HTTP操作

7.1 索引操作

7.1.1 创建索引

对比关系型数据库,创建索引就等同于创建数据库。

(1)创建索引

在 Postman 中,向 ES 服务器发 PUT 请求 :192.168.241.102:9200/start

请求后,服务器返回响应

{"acknowledged"【响应结果】: true, # true 操作成功"shards_acknowledged"【分片结果】: true, # 分片操作成功"index"【索引名称】: "shopping"
}
  • 创建索引库的分片数默认 1 片,在 7.0.0 之前的 Elasticsearch 版本中,默认 5 片。

(2)查看所有索引

在 Postman 中,向 ES 服务器发 GET 请求 :192.168.241.102:9200/_cat/indices?v

  • _cat表示查看
  • indices 表示索引

请求后,服务器返回响应

health status index uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   start MECTRqmrS4WGt87pgua8SA   1   1          0            0       225b           225b
  • health :当前服务器健康状态: green**(集群完整) yellow(单点正常、集群不完整) red(单点不正常)。
  • status :索引打开、关闭状态。
  • index :索引名
  • uuid:索引统一编号。
  • pri :主分片数量。
  • rep:副本数量。
  • docs.count:可用文档数量。
  • docs.deleted:文档删除状态(逻辑删除)。
  • store.size :主分片和副分片整体占空间大小。
  • pri.store.size :主分片占空间大小。

(3)查看单个索引

在 Postman 中,向 ES 服务器发 GET 请求 :192.168.241.102:9200/start

请求后,服务器返回响应

{"start": {  // 索引名"aliases": {}, // 别名"mappings": {}, // 映射"settings": { // 设置"index": { // 设置-索引"routing": { "allocation": {"include": {"_tier_preference": "data_content"}}},"number_of_shards": "1", // 设置 - 索引 - 主分片数量"provided_name": "start", // 设置 - 索引 - 名称"creation_date": "1704071863227", // 创建日期"number_of_replicas": "1",  // 设置 - 索引 - 副分片数量"uuid": "MECTRqmrS4WGt87pgua8SA", // 设置 - 索引 - 唯一标识"version": { // 设置 - 索引 - 版本"created": "8020099"}}}}
}

(4)删除索引

在 Postman 中,向 ES 服务器发 DELETE 请求 :192.168.241.102:9200/start

请求后,服务器返回响应

{"acknowledged": true
}

重新访问索引时,服务器返回响应:索引不存在

7.2 文档操作

7.2.1 创建文档

索引已经创建好了,接下来来创建文档,并添加数据。这里的文档可以类比为关系型数

据库中的表数据,添加的数据格式为 JSON 格式。

在 Postman 中,向 ES 服务器发 POST 请求 :http://192.168.241.102:9200/start/_doc

请求体内容为:

{"title":"羽毛球拍","brand":"李宁","color":"银色","price":"2999"
}

请求后,服务器返回响应

{"_index": "start", // 索引"_id": "JpLLxIwBtU7A05AkWzsQ", // 唯一标识 (这种请求方式是随机生成,也可以在url后面加自定义标识)"_version": 1, // 版本"result": "created", // 表示创建成功"_shards": { // 分片"total": 2, // 总数"successful": 1, // 成功"failed": 0 // 失败},"_seq_no": 0,"_primary_term": 1
}
  • 此处发送请求的方式必须为 POST,不能是 PUT,否则会发生错误。
  • 如果增加数据时明确数据主键,那么请求方式也可以为 PUT。
  • 自定义标识:http://192.168.241.102:9200/start/_doc/1
7.2.2 查看文档

查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询。

在 Postman 中,向 ES 服务器发 GET 请求 :http://192.168.241.102:9200/start**/_doc/**JpLLxIwBtU7A05AkWzsQ

请求后,服务器返回响应

{"_index": "start", // 索引"_id": "JpLLxIwBtU7A05AkWzsQ", // 标识"_version": 2,"_seq_no": 1,"_primary_term": 1,"found": true, //查询结果:true标识找到,false表示未找到"_source": { // 文档源信息"title": "羽毛球拍","brand": "李宁","color": "银色","price": "2999"}
}
7.2.3 修改文档

和新增文档一样,输入相同的 URL 地址请求,如果请求体变化,会将原有的数据内容覆盖

在 Postman 中,向 ES 服务器发 POST 请求 :http://192.168.241.102:9200/start/_doc/JpLLxIwBtU7A05AkWzsQ

请求体内容为

{"title":"羽毛球拍","brand":"李宁","color":"白色","price":"2999"
}

修改成功后,服务器响应结果

{"_index": "start","_id": "JpLLxIwBtU7A05AkWzsQ","_version": 3, // 版本"result": "updated", // 结果“updated表示数据被更新"_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 3,"_primary_term": 1
}
7.2.4 修改字段

修改数据时,也可以只修改某一给条数据的局部信息

在 Postman 中,向 ES 服务器发 POST 请求 :http://192.168.241.102:9200/start/_update/JpLLxIwBtU7A05AkWzsQ

请求体内容为

{ "doc": {"price":3999.00} 
}

修改成功后,服务器响应结果

{"_index": "start","_id": "JpLLxIwBtU7A05AkWzsQ","_version": 4,"result": "updated","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 4,"_primary_term": 1
}

根据唯一性标识,查询文档数据,文档数据已经更新。

7.2.5 删除文档

删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。

在 Postman 中,向 ES 服务器发 DELETE 请求 :http://192.168.241.102:9200/start/_doc/JpLLxIwBtU7A05AkWzsQ

删除成功,服务器响应结果

{"_index": "start","_id": "JpLLxIwBtU7A05AkWzsQ","_version": 5, // 版本(对数据的操作都会更新版本)"result": "deleted", // 结果 deleted表示数据被标记为删除"_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 5,"_primary_term": 1
}
  • 删除后再查询当前文档信息会返回一个json中字段found的值为false。
  • 如果删除一个并不存在的文档会返回一个json中字段result的值为not_found。
7.2.6 条件删除文档

一般删除数据都是根据文档的唯一性标识进行删除,实际操作时,也可以根据条件对多条数

据进行删除。

向 ES 服务器发 POST 请求 :http://192.168.241.102:9200/start/_delete_by_query

请求体内容为:

{"query":{"match":{"price":3999.00}}
}

删除成功后,服务器响应结果:

{"took": 16,  // 耗时"timed_out": false, // 是否超时"total": 2, // 总数"deleted": 2, // 删除数量"batches": 1,"version_conflicts": 0,"noops": 0,"retries": {"bulk": 0,"search": 0},"throttled_millis": 0,"requests_per_second": -1.0,"throttled_until_millis": 0,"failures": []
}

7.3 映射操作

有了索引库,等于有了数据库中的 database。

接下来就需要建索引库(index)中的映射了,类似于数据库(database)中的表结构(table)。

创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型

下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)。

(1)创建映射

在 Postman 中,向 ES 服务器发 PUT 请求 :http://192.168.241.102:9200/student**/_mapping**

请求体内容为

{"properties": {"name":{"type": "text","index": true},"sex":{"type": "text","index": false},"age":{"type": "long","index": false}}
}

服务器响应结果

{"acknowledged": true
}

映射数据说明:

  • 字段名:任意填写,下面指定许多属性,例如:title、subtitle、images、price

  • type:类型,Elasticsearch 中支持的数据类型非常丰富,以下几个关键的:

    • String 类型,又分两种:
      • text:可分词
      • keyword:不可分词,数据会作为完整字段进行匹配
    • Numerical:数值类型,分两类
      • 基本数据类型:long、integer、short、byte、double、float、half_float
      • 浮点数的高精度类型:scaled_float
    • Date:日期类型
    • Array:数组类型
    • Object:对象
  • index:是否索引,默认为 true,也就是说你不进行任何配置,所有字段都会被索引。

    true:字段会被索引,则可以用来进行搜索

    false:字段不会被索引,不能用来搜索

  • store:是否将数据进行独立存储,默认为 false

    原始的文本会存储在_source 里面,默认情况下其他提取出来的字段都不是独立存储

    的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置

    “store”: true 即可,获取独立存储的字段要比从_source 中解析快得多,但是也会占用

    更多的空间,所以要根据实际业务需求来设置。

  • analyzer:分词器。

(2)查看映射

在 Postman 中,向 ES 服务器发 GET 请求 :http://192.168.241.102:9200/student**/_mapping**

服务器响应结果如下:

{"start": {"mappings": {"properties": {"age": {"type": "long","index": false},"brand": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"color": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"name": {"type": "text"},"price": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"sex": {"type": "text","index": false},"title": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}

(3)索引映射关联

在 Postman 中,向 ES 服务器发 PUT 请求 :http://192.168.241.102:9200/student

请求体:

{"settings": {},"mappings": {"properties": {
"name":{"type": "text","index": true},
"sex":{"type": "text","index": false
},
"age":{"type": "long","index": false
}}}
}

服务器响应结果如下:

{"acknowledged": true,"shards_acknowledged": true,"index": "student"
}

7.4 高级查询

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

(1)查询所有文档

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

请求体:

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

返回结果:

{"took": 2, // 查询花费时间,单位毫秒"timed_out": false, // 是否超时"_shards": {// 分片信息"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": { // 搜索命中结果"total": {"value": 3,"relation": "eq" // 计数规则},"max_score": 1.0,"hits": // 命中结果集合{"_index": "start","_id": "1","_score": 1.0,"_source": {"title": "羽毛球拍","brand": "李宁","color": "银色","price": "2999"}},{"_index": "start","_id": "2","_score": 1.0,"_source": {"title": "羽毛球拍","brand": "尤尼克斯","color": "红色","price": "2999"}},{"_index": "start","_id": "3","_score": 1.0,"_source": {"title": "羽毛球拍","brand": "尤尼克斯","color": "白色","price": "2999"}}]}
}

(2) 匹配查询

match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系

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

{"query": {"match": {"brand": "尤尼克斯"}}
}

(3)字段匹配查询

multi_match 与 match 类似,不同的是它可以在多个字段中查询。

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

{"query": {"multi_match": {"query": "zhangsan","fields": ["name","nickname"]}}
}

服务器响应结果:

{"took": 6,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 1.0109437,"hits": [{"_index": "start","_id": "2","_score": 1.0109437,"_source": {"title": "羽毛球拍","brand": "尤尼克斯","color": "红色","price": "2999"}},{"_index": "start","_id": "3","_score": 1.0109437,"_source": {"title": "羽毛球拍","brand": "尤尼克斯","color": "白色","price": "2999"}}]}
}

(4) 关键字精确查询

term 查询,精确的关键词匹配查询,不对查询条件进行分词。

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

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

服务器响应结果:

(5)多关键字精确查询

terms 查询和 term 查询一样,但它允许你指定多值进行匹配。

如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件,类似于 mysql 的 in

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

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

(6)指定查询字段

默认情况下,Elasticsearch 在搜索的结果中,会把文档中保存在_source 的所有字段都返回。

如果我们只想获取其中的部分字段,我们可以添加_source 的过滤

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

{"_source": ["title","color"], "query": {"terms": {"color": ["白色"]}}
}

(7)过滤字段

也可以通过:

  • includes:来指定想要显示的字段
  • excludes:来指定不想要显示的字段

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

{"_source": {"includes": ["title","brand","color"]}, "query": {"terms": {"color": ["白色"]}}
}

(8)组合查询

bool把各种其它查询通过must(必须 )、must_not(必须不)、should(应该)的方

式进行组合

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

{"query": {"bool": {"must": [{"match": {"title": "尤尼克斯"}}],"must_not": [{"match": {"color": "红色"}}],"should": [{"match": {"price": "2999"}}]}}
}

(9)范围查询

range 查询找出那些落在指定区间内的数字或者时间。range 查询允许以下字符

操作符说明
gt大于>
gte大于等于>=
lt小于<
lte小于等于<=

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

请求体

{"query": {"range": {"price": {"gte": 300,"lte": 3500}}}
}

(10)模糊查询

返回包含与搜索字词相似的字词的文档。

编辑距离是将一个术语转换为另一个术语所需的一个字符更改的次数。这些更改可以包括:

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

为了找到相似的术语,fuzzy 查询会在指定的编辑距离内创建一组搜索词的所有可能的变体

或扩展。然后查询返回每个扩展的完全匹配。

通过 fuzziness 修改编辑距离。一般使用默认值 AUTO,根据术语的长度生成编辑距离。

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

请求体:

{"query": {"fuzzy": {"color": {"value": "白色"}}}
}

(11)单字段排序

sort 可以让我们按照不同的字段进行排序,并且通过 order 指定排序的方式。desc 降序,asc

升序。

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

{"query": {"match": {"title":"羽毛球拍"}},"sort": [{"price": {"order":"desc"}}]
}

(12)多字段排序

假定我们想要结合使用 age 和 _score 进行查询,并且匹配的结果首先按照年龄排序,然后

按照相关性得分排序 。

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

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

(13)高亮查询

在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮。

Elasticsearch 可以对查询内容中的关键字部分,进行标签和样式(高亮)的设置。

在使用 match 查询的同时,加上一个 highlight 属性:

  • pre_tags:前置标签

  • post_tags:后置标签

  • fields:需要高亮的字段

  • title:这里声明 title 字段需要高亮,后面可以为这个字段设置特有配置,也可以空

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

请求体:

{"query": {"match": {"brand": "尤尼克斯"}},"highlight": {"pre_tags": "<font color='red'>","post_tags": "</font>","fields": {"name": {}}}
}

(14)分页查询

from:当前页的起始索引,默认从 0 开始。 from = (pageNum - 1) * size

size:每页显示多少条

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

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

(15) 聚合查询

聚合允许使用者对 es 文档进行统计分析,类似与关系型数据库中的 group by,当然还有很

多其他的聚合,例如取最大值、平均值等等。

  • 对某个字段取最大值 max

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

请求体:

{"aggs":{"max_age":{"max":{"field":"age"}}},"size":0
}
  • 对某个字段取最小值 min(类似上面的)
  • 对某个字段求和 sum
  • 对某个字段取平均值 avg
  • 对某个字段的值进行去重之后再取总数(cardinality)
  • Stats 聚合
    • stats 聚合,对某个字段一次性返回 count,max,min,avg 和 sum 五个指标

(16) 桶聚合查询

桶聚和相当于 sql 中的 group by 语句

  • terms 聚合,分组统计

请求体

{"aggs":{"age_groupby":{"terms":{"field":"age"}}},"size":0
}

在这里插入图片描述
                      您的支持是我创作的无限动力

在这里插入图片描述
                      希望我能为您的未来尽绵薄之力

在这里插入图片描述
                      如有错误,谢谢指正;若有收获,谢谢赞美

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

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

相关文章

NLP:预测新闻类别 - 自然语言处理中嵌入技术

简介 在数字时代&#xff0c;在线新闻内容呈指数级增长&#xff0c;需要有效的分类以增强可访问性和用户体验。先进机器学习技术的出现&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;为文本数据的自动分类开辟了新的领域。本文[1]探讨了在 NLP …

基于EMD的滚动轴承故障诊断算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1EMD的基本原理 固有模态函数&#xff08;IMF&#xff09; 筛分过程 4.2 基于EMD的滚动轴承故障诊断算法 信号预处理 EMD分解 特征提取 故障诊断 5.算法完整程序工程 1.算法运行效…

SpringBoot 实现Execl 导入导出

1、引包 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.0.3</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easy…

【复现】FreeU以及结合stable diffusion

code&#xff1a;GitHub - ChenyangSi/FreeU: FreeU: Free Lunch in Diffusion U-Net 才发现AnimateDiff更新v3了&#xff0c;以及又发了篇CVPR的改进工作&#xff1a; 在这个版本中&#xff0c;我们通过域适配器LoRA对图像模型进行了微调&#xff0c;以便在推理时具有更大的灵…

MySQL 高级(进阶) SQL 语句

目录 一、实验环境准备 二、MySQL高阶查询 1、语句与命令 2、实验实操 三、MySQL函数 1、语句与命令 2、实验操作 一、实验环境准备 #创建两个数据表&#xff0c;为实验提供环境&#xff1a; use kgc; #选择数据库&#xff0c;有则直接使用 无则按照以下步骤自建即可…

WPF+Halcon 培训项目实战(8-9):WPF+Halcon初次开发

文章目录 前言相关链接项目专栏运行环境匹配图片WPF Halcon组件HSmartWindowControlWPF绑定读取图片运行代码运行结果 抖动问题解决运行结果 绘制矩形绘制图像会消失 绘制对象绑定事件拖动事件 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想…

nginx安装和配置

目录 1.安装 2.配置 3.最小配置说明 4. nginx 默认访问路径 1.安装 使用 epel 源安装 先安装 yum 的扩展包 yum install epel-release -y 再安装 nginx yum install nginx -y 在启动nginx 前先关闭防火墙 systemctl stop firewalld 取消防火墙开机自启 systemctl di…

Self-attention学习笔记(Self Attention、multi-head self attention)

李宏毅机器学习Transformer Self Attention学习笔记记录一下几个方面的内容 1、Self Attention解决了什么问题2、Self Attention 的实现方法以及网络结构Multi-head Self Attentionpositional encoding 3、Self Attention 方法的应用4、Self Attention 与CNN以及RNN对比 1、Se…

基于grpc从零开始搭建一个准生产分布式应用(8) - 01 - 附:GRPC公共库源码

开始前必读&#xff1a;​​基于grpc从零开始搭建一个准生产分布式应用(0) - quickStart​​ common包中的源码&#xff0c;因后续要用所以一次性全建好了。 一、common工程完整结构 二、引入依赖包 <?xml version"1.0" encoding"UTF-8"?> <p…

【linux】cat的基本使用

cat是一个常用的命令&#xff0c;用来显示文本的内容&#xff0c;合并和创建文本文件 类似命令还有显示文件开头的内容&#xff1a; 【linux】head的用法 输出文件开头的内容-CSDN博客 显示文件末尾的内容&#xff1a; 【linux】tail的基本使用-CSDN博客 当我们想到了想要…

Zookeeper-Zookeeper选举源码

看源码方法&#xff1a; 1、先使用&#xff1a;先看官方文档快速掌握框架的基本使用 2、抓主线&#xff1a;找一个demo入手&#xff0c;顺藤摸瓜快速静态看一遍框架的主线源码&#xff0c;画出源码主流程图&#xff0c;切勿一开始就陷入源码的细枝末节&#xff0c;否则会把自…

Primavera Unifier 项目控制延伸:Phase Gate理论:3/3

继续上一篇阶段Gate的具体内容 https://campin.blog.csdn.net/article/details/127827681https://campin.blog.csdn.net/article/details/127827681 阶段 3 研发 前述阶段的计划和安排都要在研发阶段执行起来&#xff0c;同时&#xff0c;最重要的产品设计和开发部分也需要在…

系统学习Python——装饰器:函数装饰器-[对方法进行装饰:基础知识]

分类目录&#xff1a;《系统学习Python》总目录 我们在前面的文章中编写了第一个基于类的tracer函数装饰器的时候&#xff0c;我们简单地假设它也应该适用于任何方法一一一被装饰的方法应该同样地工作&#xff0c;并且自带的self实例参数应该直接包含在*args的前面。但这一假设…

计算机基础面试题 |04.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

python打开文件的方式比较

open(addr,w) 打开之后文件无论以前有什么&#xff0c;打开后都要清空 /// open(addr,r) 文件打开后&#xff0c;不删除以前内容

多人协同开发git flow,创建初始化项目版本

文章目录 多人协同开发git flow&#xff0c;创建初始化项目版本1.gitee创建组织模拟多人协同开发2.git tag 打标签3.git push origin --tags 多人协同开发git flow&#xff0c;创建初始化项目版本 1.gitee创建组织模拟多人协同开发 组织中新建仓库 推送代码到我们组织的仓库 2…

STM32与TB6612电机驱动器的基础入门教程

TB6612是一款常用的双路直流电机驱动芯片&#xff0c;适用于小型机器人以及其他需要控制电机方向和转速的应用。在STM32微控制器的配合下&#xff0c;可以实现对TB6612电机驱动器的控制&#xff0c;进而实现电机的控制。本文将带领读者一步步了解如何搭建基于STM32与TB6612的电…

我从来不理解JavaScript闭包,但我用了它好多年

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热衷分享有趣实用的文章&#xff0c;希望大家多多支持&#xff0c;一起进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 你是否学习了很久JavaScript但还没有搞懂闭包呢&#xff1f;今天就来聊一下…

SpringBoot解决前后端分离跨域问题:状态码403拒绝访问

最近在写和同学一起做一个前后端分离的项目&#xff0c;今日开始对接口准备进行 登录注册 的时候发现前端在发起请求后&#xff0c;抓包发现后端返回了一个403的错误&#xff0c;解决了很久发现是【跨域问题】&#xff0c;第一次遇到&#xff0c;便作此记录✍ 异常描述 在后端…

Java---网络编程

文章目录 1. 网络编程概述2. InetAddress3. 端口和协议4. Java网络API5. URL6. URLConnection类 1. 网络编程概述 1. 计算机网络&#xff1a;是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统、网络管理软…