[golang gin框架] 37.ElasticSearch 全文搜索引擎的使用

news2024/11/24 9:49:25

一.全文搜索引擎 ElasticSearch 的介绍,以

及安装配置前的准备工作

  1. 介绍

ElasticSearch 是一个基于 Lucene 搜索服务器,它提供了一个 分布式多用户能力的 全文搜索引擎,基于 RESTful web 接口,Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎,设计用于云计算中,能够达到 实时搜索, 稳定可靠快速,安装使用方便
官网地址: https://www.elastic.co/cn/
中文文档: https://www.elastic.co/guide/cn/index.html
github地址: https://github.com/elastic/elasticsearch
  1. 优点

  • 支持分布式,高可用

  • 底层就是Lucene, 隐藏了Lucene的复杂性

  • API更简单,更高级

  • 支持PB级别的数据

  • 完成了搜索的功能和分析功能

  1. 准备工作

电脑上面 必须安装 java jdk 以及 配置对应的环境变量
  1. ElasticSearch与jdk版本匹配

elasticsearch支持JDK1.8的,仅仅是 7.17.3及其之前的版本,如果下的最新版本,最低JDK得17及其以上

二.在 Windows 下面下载并启动 ElasticSearch

  1. ElasticSearch 下载

官方下载地址: https://www.elastic.co/downloads/elasticsearch
百度网盘链接: https://pan.baidu.com/s/1Xq7dFktRfpm2Ox8OK9Ud4w 提取码:qk60
  1. 运行 ElasticSearch

下载完成 ElasticSearch 包后,把 ElasticSearch 包放在一个固定 目录,然后从 命令窗口 cd 到ElasticSearch 包对应的目录, 运行位于 bin 文件夹中的 ElasticSearch.bat,这将会启动ElasticSearch 在控制台的前台运行,这意味着可在控制台中看到运行信息或一些错误信息,并可以使用 ctrl + c 停止或关闭它
bin 启动文件目录
config 配置文件目录
    1og4j2 日志配置文件
    jvm.options java虚拟机相关的配置(默认启动占1g内存,内容不够需要自己调整)
    elasticsearch.ym1 elasticsearch的配置文件,默认9200端口!跨域
1ib 
    相关jar包
modules 功能模块目录
plugins 插件目录
    ik分词器

在启动过程中,ElasticSearch 的实例运行会占用大量的内存,所以在这一过程中,电脑会变得比较慢,需要耐心等待,启动加载完成后电脑就可以正常使用了。

如果没有安装 Java 运行时或没有正确配置,应该会输出一个消息说: JAVA_HOME 环境变量必须设置,要解决这个问题,首先下载并安装 Java JDK,并且确保已正确配置 JAVA_HOME 环境变量
有时候还会出现这样的提示:
报错原因是因为JDK版本太低或者ElasticSearch版本太高,降低版本即可,低版本ElasticSearch下载地址: Past Releases of Elastic Stack Software | Elastic

启动成功图示:

  1. 访问 ElasticSearch Api

ElasticSearch 的实例并运行,可以使用 localhost:9200,基于 JSON 的 REST API 与
ElasticSearch 进行通信,如果输入 http://localhost:9200/ 出来如下界面,说明
ElasticSearch 配置并启动成功
  1. 安装配置中文分词工具

默认情况 ElasticSearch 只适用英文分词 , 如果要做 中文分词的话 , 要安装
elasticsearch-analysis-ik插件,官方github地址: https://github.com/medcl/elasticsearch-analysis-ik;官方提供了 两种安装中文分词工具的 方法,由于第二种可能因为版本问题会安装失败,所以接下来用 第一种方式安装
在这里,下载工具的时候要注意: 下载对应ES版本的分词工具
百度网盘下载链接:链接: https://pan.baidu.com/s/1XeUjJO_qYYebUxNIBfSSSA 提取码:wefk

步骤:

(1).按照上诉下载对应的分词工具

(2).在分词工具根目录创建 plugins/ik 文件

(3).把分词工具包的内容复制到 plugins/ik 文件里面

(4).修改配置文件的版本(如下图

注意:一般修改配置的时候先备份配置

安装完成中文分词插件后,重新启动 ElasticSearch即可

三.在linux下面下载并启动 ElasticSearch

  1. ElasticSearch下载

windows下载地址一样,下载完上传到Linux服务器直接解压
  1. 配置

ES的默认端口是 9200,提前在服务器端安全组端开放
  • vim编辑conf/elasticsearch.yml文件

# 取消注释,默认只能本地访问,修改为0.0.0.0,外网也能访问
network.host: 0.0.0.0  
  • 创建专用用户启动ES

root用户不能直接启动ES,会报如下错误
  • 进入bin目录

cd /www/server/elasticsearch/elasticsearch-7.15.2/bin
  • 创建用户useres

useradd useres
  • 授权到es目录

chown useres:useres -R elasticsearch-7.15.2
  • 切换到useres用户

su useres
  • 启动ES

./elasticsearch
  1. 测试访问

http://服务器ip地址:9200/
  1. 安装配置中文分词工具

windows一样,下载解压到plugins/ik,修改配置并重启es即可, 注意:解压完后要把压缩包删掉,否则会报错
  1. 启动时可能会报错

报错1:

原因: ES用户拥有的 内存权限太小,至少需要262144
解决办法: 切换到root用户,修改 /etc/sysctl.conf文件
su root

vim 修改/etc/sysctl.conf文件

#添加如下内容
vm.max_map_count=262144
#保存退出后,刷新配置文件
sysctl -p
切换useres用户后,再次启动ES

报错2:

vim编辑 conf/elasticsearch.yml文件, 取消注释,删掉, “node-2”
再次启动ES

四.Elasticsearch 中的一些概念概念

相关网址: https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
  1. 集群(cluster)

代表一个集群,集群中有多个节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es 的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看 es 集群,在逻辑上是个整体,你与任何一个节点的通信和与整个 es 集群通信是等价的

  1. 索引(index)

ElasticSearch 将它的数据存储在一个多个索引(index)中,用 SQL 领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档,并通过ElasticSearch 内部使用 Lucene 将数据写入索引或从索引中检索数据

  1. 文档(document)

文档(document)是 ElasticSearch 中的主要实体,对所有使用 ElasticSearch的案例来说,他们最终都可以归结为对文档的搜索,文档由字段构成

  1. 映射(mapping)

所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping),一般由用户自己定义规则

  1. 类型(type)

每个文档都有与之对应的类型(type)定义,这允许用户在一个索引中存储多种文档类型,并为不同文档提供类型提供不同的映射

  1. 分片(shards)

代表索引分片,es 可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索,分片的数量只能在索引创建前指定,并且索引创建后不能更改,5.X 默认不能通过配置文件定义分片

  1. 副本(replicas)

代表索引副本(备份),es 可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复,二是提高 es 的查询效率,es 会自动对搜索请求进行负载均衡

  1. 数据恢复(recovery)

代表数据恢复或叫数据重新分布,es 在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复

GET /_cat/health?v #可以看到集群状态
  1. 数据源(River)

代表 es 的一个数据源,也是其它存储方式(如:数据库)同步数据到 es 的一个方

法,它是以插件方式存在的一个 es 服务,通过读取 river 中的数据并把它索引到 es

中,官方的 river 有 couchDB 的,RabbitMQ 的,Twitter 的,Wikipedia 的

  1. 网关(gateway)

代表 es 索引的持久化存储方式,es 默认是先把索引存放到内存中当内存满了时再持久化到硬盘,当这个 es 集群关闭再重新启动时就会从 gateway 中读取索引数据,es 支持多种类型的 gateway,有本地文件系统(默认)分布式文件系统Hadoop HDFS 和 amazon 的 s3 云存储服务

  1. 自动发现(discovery.zen)

代表 es 的自动发现节点机制,es 是一个基于 p2p 的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互

5.X 关闭广播,需要自定义
  1. 通信(Transport)

代表 es 内部节点或集群与客户端的交互方式默认内部是使用 tcp 协议进行交互,同时它支持 http 协议(json 格式)、thrift、servlet、memcached、zeroMQ 等的传输协议(通过插件方式集成)

节点间通信端口默认: 9300-9400
  1. 分片和复制(shards and replicas)

(1).分片

一个索引可以存储超出单个结点硬件限制的大量数据,比如,一个具有 10 亿文档的索引占据 1TB 的磁盘空间,而任一节点可能没有这样大的磁盘空间来存储或者单个节点处理搜索请求,响应会太慢。为了解决这个问题,Elasticsearch 提供了将索引划分成多片的能力,这些片叫做分片。当创建一个索引的时候,可以指定想要的分片的数量,每个分片本身也是一个功能完善并且独立的“索引”,这个“索引” 可以被放置到集群中的任何节点上

分片之所以重要,主要有两方面的原因:

  • 允许水平分割/扩展内容容量

  • 允许在分片(位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量

至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由 Elasticsearch 管理的

(2).复制

在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点因为某些原因处于离线状态或者消失的情况下,故障转移机制是非常有用且强烈推荐的,为此, Elasticsearch 允许创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制

复制之所以重要,有几个主要原因:

  • 在分片/节点失败的情况下,复制提供了高可用性,复制分片不与原/主要分片置于同一节点上是非常重要的。因为搜索可以在所有的复制上并行运行,复制可以扩展你的搜索量/吞吐量

  • 总之,每个索引可以被分成多个分片。一个索引也可以被复制 0 次(即没有复制)或多次,一旦复制了,每个索引就有了主分片(作为复制源的分片)和复制分片(主分片的拷贝)

  • 分片和复制的数量可以在索引创建的时候指定,在索引创建之后,可以在任何时候动态地改变复制的数量,但是不能再改变分片的数量

  • 5.X 默认 5:1 5 个主分片,1 个复制分片

默认情况下,Elasticsearch 中的每个索引分配 5 个主分片1 个复制,这意味着,如果集群中至少有两个节点,索引将会有 5 个主分片和另外 5 个复制分片(1 个完全拷贝),这样每个索引总共就有 10 个分片

五.使用 RESTAPI 来操作 ElasticSearch

  1. 简介

ElasticSearch 的实例并运行,可以使用 localhost:9200,基于 JSON 的 REST API ElasticSearch 进行通信,在 ElasticSearch 自己的文档中,所有示例都使用 curl, 但是,当使用 API 时也可使用图客户端(如 Fiddler 或 RESTClient),这样操作起更方便直观一些
浏览器也提供了操作 ElasticSearch 的插件, 比如: Chrome 插件 Sense, Sense 提供了一个专门用于使用 ElasticSearch 的 REST API 的简单用户界面, 它还具有许多方便的功能,由于网络问题的原因,也可以使用 火狐浏览器里面提供的 ElasticSearch-Head,比如:火狐浏览器的 ElasticSearch-Head
  1. 安装火狐 ElasticSearch-Head步骤

上述请求将执行最简单的 搜索查询匹配服务器上 所有索引中的 所有文档,针对ElasticSearch 运行,Sense 提供的最简单的查询,在响应结果的数据中并没有查询到任何数据,因为没有任何索引,如下所示 :
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 0,
"successful": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": 0,
"hits": []
}
}
  1. 使用ElasticSearch-Head

先看看几个重要概念

  • type:类型,可以是 text、long、short、date、integer、object 等

  • index是否索引,默认为 true

  • store是否存储,默认为 false

  • analyzer分词器,这里的 ik_max_word 即使用 ik 分词器

具体代码参考ik官方github: https://github.com/medcl/elasticsearch-analysis-ik

(1).创建索引

curl -XPUT http://localhost:9200/goods

(2).创建类型以及配置映射

_mapping:映射标识
#配置映射url
curl -XPOST http://localhost:9200/goods/_mapping
创建配置映射以及类型
{ 
    "properties": {  #属性       
        "content": {  #映射名
            "type": "text",  #类型
            "analyzer": "ik_max_word",  #检索粒度
            "search_analyzer": "ik_smart"  #检索粒度
        }
    }
}

(3).查看映射

GET /goods/_mapping

(4).增加数据

_doc为默认值,以后官方可能会取消
POST /goods/_doc
{"content":"渔警调查:平均每天扣 1 艘渔船"}

(5).查询数据

_search:查询标识
POST /goods/_search
查询格式:
{ 
    "query" : { 
        "match" : { 
            "content" : "渔船" 
                }
            }, 
        "highlight" : { 
            "pre_tags" : ["<tag1>", "<tag2>"], 
            "post_tags" : ["</tag1>", "</tag2>"], 
            "fields" : { "content" : {}
        }
    }
}

(5).修改数据

9lkEDmkBLW9aMdEIICBc:数据唯一编号,相当于mysql中的主键
PUT /news/_doc/9lkEDmkBLW9aMdEIICBc
{
"content": "渔警冲突调查:平均每天扣 1 艘渔船xxx" 
}

(6).删除数据

DELETE /news/_doc/9lkEDmkBLW9aMdEIICBc

六.ElasticSearch 安装可视化工具 Kibana的使用

官方文档: https://www.elastic.co/guide/cn/kibana/current/install.html
百度网盘下载链接: https://pan.baidu.com/s/169GyGwxHLSYwGJ7Wmo-z8Q 提取码:yzbl
在这里介绍windows安装方式
  1. 下载Kibana

  1. 运行

warning警告不用管
  1. 访问

Kibana 是一个 web 应用,可以通过5601端口访问。只需要在浏览器中指定 Kibana 运行的机器,然后指定端口号即可。例如, localhost:5601 或者 http://YOURDOMAIN.com:5601 。当访问 Kibana 时, Discover 页默认会加载默认的索引模式。时间过滤器设置的时间为过去15分钟,查询设置为匹配所有 (\*) 。如果看不到任何文档,试着把时间过滤器的范围调大。如果还是看不到任何结果,很可能是根本就 没有 任何文档
  1. 检查 Kibana 状态

您可以通过 localhost:5601/status 来访问 Kibana 的服务器状态页,状态页展示了服务器资源使用情况和已安装插件列表。

  1. 使用Kibaba操作

相关基础功能代码如下:

#删除索引
DELETE goods

#创建索引
PUT /goods

#修改映射
PUT /goods/_mapping
{
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_max_word"
             }
          }
}
#修改映射
PUT /goods/_mapping
{
        "properties": {
              "title":{
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_max_word"
             }
          }
}

#查询映射
GET /goods/_mapping

#增加数据
POST  /goods/_doc/
{
  "title":"我",
  "content":"美国留给伊拉克的是个烂摊子吗"
  
}
#增加数据
POST /goods/_doc/
{"content":"美国留给伊拉克的是个烂摊子吗"}
#增加数据
POST /goods/_doc/
{"content":"公安部:各地校车将享最高路权66666666"}
#增加数据
POST /goods/_doc/
{"content":"php公安部:各地校车将享最高路权"}
#增加数据
POST /goods/_doc/
{"content":"java公安部:各地校车将享最高路权"}
#增加数据
POST /goods/_doc/
{"content":"冲突调查:均每天扣1艘渔船"}
#增加数据
POST /goods/_doc/
{"content":"男子"}

#查询全部
GET /goods/_search
{
  "query": {
    "match_all": {}
  }
}
#查询全部
GET /goods/_doc/_search
{
  
}

#根据关键词查询数据
POST /goods/_doc/_search
{
    "query" : { "match" : { "content" : "平均每天" }},
    "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content" : {}
        }
    }
}

#修改数据:CqcgS4gBnl0dU5J3AKrE是文档唯一标识
PUT /goods/_doc/CqcgS4gBnl0dU5J3AKrE
{
          "title": "我xxxxx",
          "content": "111美国留给伊拉克的是个烂摊子吗"
}

#删除数据
DELETE /goods/_doc/CqcgS4gBnl0dU5J3AKrE

更多操作方法见:

Kibana官方文档:https://www.elastic.co/guide/cn/kibana/current/introduction.html

elasticsearch-analysis-ik:https://github.com/medcl/elasticsearch-analysis-ik

[上一节]https://blog.csdn.net/zhoupenghui168/article/details/130715687[golang gin框架] 36.Gin 商城项目-RESTful API 设计指南,允许Cros跨域 ,提供api接口实现前后端分离,以及JWT的使用

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

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

相关文章

PIC18F26单片机波特率配置

只需要配置以下三个寄存器&#xff1a; BRGCON1 BRGCON2 BRGCON3 BRGCON10x07; > 0000 0111 BRGCON20x90; > 1001 0000 BRGCON30x42; > 0101 0010 BRGCON1&#xff1a; Sync_Sog (bit7~bit6)1TQ,BRP(bit5~bit0)1 &#xff0c;则TQ((2*(BRP1))/Fosc16/32M&am…

Mysql存储时间,对应Api及对应的java属性

1.Mysql存储时间的类型 常用的储存时间/日期的类型&#xff1a; DATE&#xff1a;仅用于存储日期值&#xff08;年、月、日&#xff09;&#xff0c;格式为YYYY-MM-DD。TIME&#xff1a;仅用于存储时间值&#xff08;小时、分钟、秒&#xff09;&#xff0c;格式为HH:MM:SS。DA…

朴素贝叶斯算法实现英文文本分类

目录 1. 作者介绍2. 朴素贝叶斯算法简介及案例2.1朴素贝叶斯算法简介2.2文本分类器2.3对新闻文本进行文本分类 3. Python 代码实现3.1文本分类器3.2 新闻文本分类 参考&#xff08;可供参考的链接和引用文献&#xff09; 1. 作者介绍 梁有成&#xff0c;男&#xff0c;西安工程…

【UE】连续射击Niagara特效

效果 步骤 1. 新建一个粒子系统 选择“来自所选发射器的新系统” 添加“Fountain” 2. 打开这个新建的粒子系统 选中“Initialize Particle”模块&#xff0c;将颜色设置为&#xff08;100,0,0&#xff09; 再让生成的粒子大一些 选中“Spawn Rate”模块&#xff0c;将粒子的…

如何编写接口自动化框架系列之unittest测试框架的详解(二)

在编写自动化框架过程中 &#xff0c;我们首先想到的就是选择一个合适的测试框架 &#xff0c;目前常用的测试框架有unittest和pytest , unittest比较简单&#xff0c;适合入门着学习 &#xff1b;而pytest比较强大&#xff0c;适合后期进阶 。本文主要介绍的就是unittest框架 …

pytorch笔记(十)Batch Normalization

环境 python 3.9numpy 1.24.1pytorch 2.0.0+cu117一、Batch Normalize 作用 加快收敛、提升精度:对输入进行归一化,从而使得优化更加容易减少过拟合:可以减少方差的偏移可以使得神经网络使用更高的学习率:BN 使得神经网络更加稳定,从而可以使用更大的学习率,加速训练过程…

Chapter5: SpringBoot与Web开发2

接上一篇 Chapter4: SpringBoot与Web开发1 10. 配置嵌入式Servlet容器 SpringBoot默认采用Tomcat作为嵌入的Servlet容器&#xff1b;查看pom.xml的Diagram依赖图&#xff1a; 那么如何定制和修改Servlet容器的相关配置? 下面给出实操方案。 10.1 application.properties配…

依赖范围和编译classpath、测试classpath、运行classpath的关系

最近学习maven&#xff0c;这里看了下别人解释的区别原文&#xff0c;机翻一下&#xff0c;看的懵懵懂懂的 这其实应该是一个简单的区别&#xff0c;但我一直在Stackoverflow上回答一连串类似的问题&#xff0c;而人们往往会误解这个问题。 那么&#xff0c;什么是classpath&am…

[CF复盘] Codeforces Round 874 (Div. 3) 20230520】

[CF复盘] Codeforces Round 874 (Div. 3 20230520 总结A. Musical Puzzle![在这里插入图片描述](https://img-blog.csdnimg.cn/01ab8d835b4343659e8b80680dd9d639.png)2. 思路分析3. 代码实现 B. Restore the Weather1. 题目描述2. 思路分析3. 代码实现 C. Vlad Building Beaut…

FinClip | 2023 年 4 月产品大事记

我们的使命是使您&#xff08;业务专家和开发人员&#xff09;能够通过小程序解决您的关键业务流程挑战。不妨让我们看看在本月的产品与市场发布亮点&#xff0c;看看它们如何帮助您实现目标。 产品方面的相关动向&#x1f447;&#x1f447;&#x1f447; 全新版本的小程序统…

知识图谱实战应用12-食谱领域智能问答系统,实现菜谱问答

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用12-食谱领域智能问答系统,实现菜谱问答,本项目基于py2neo和neo4j图数据库,将知识图谱应用于菜谱领域。通过构建菜谱知识图谱,实现简单的菜谱食材问答系统。用户可以通过问答系统,快速获取简单的菜谱食材信息。 一…

Vivado综合属性系列之十一 GATED_CLOCK

目录 一、前言 二、GATED_CLOCK 2.1 属性说明 2.2 工程代码 2.3 综合结果 一、前言 在工程设计中&#xff0c;时钟信号通常来源于专用的时钟单元&#xff0c;如MMCM和PLL等。但也存在来自逻辑单元的信号作为时钟&#xff0c;这种时钟信号为门控时钟。门控时钟可以降低时…

Linux下V4l2框架编程_USB摄像头数据采集

Linux内核版本:3.5.0 1.1 V4L2简介 v4L2是针对uvc免驱usb设备的编程框架,主要用于采集usb摄像头等。 这篇文章介绍V4L2框架读取摄像头数据的流程,介绍ioctl常用的命令参数,以及各种摄像头相关的结构体成员含义,最终完成数据采集。 编程模式如下: V4l2支持多种设备,它可…

项目管理PMP好考吗,没有经验?

现在越来越多的产品经理和开发人员也投入到考PMP的大军中&#xff0c;在真实的项目中也会有很多产品经理兼任项目经理的职责&#xff0c;这点还是比较常见的&#xff0c;如果说产品或者开发人员考了PMP证书&#xff0c;本身也会让你在找工作的大军中更具有优势&#xff0c;俗话…

模电基础学习

模拟电路基础 计算机工作原理 用电去控制电,这是计算机工作的核心原理。 电学基础 软件编程更新迭代特别的快,而硬件的学习可能很多年都没有变化,越老越吃香。电路设计好比老中医,学会一个套路就可以用一辈子,因为电路设计是基于物理学原理一直都没有变化过,现在最常用…

SSM编程---Day 01

目录 一、Maven简介 &#xff08;一&#xff09;软件开发中的阶段 &#xff08;二&#xff09;Maven能做什么 &#xff08;三&#xff09;没有使用maven怎么管理依赖 &#xff08;四&#xff09;什么是maven &#xff08;五&#xff09;maven中的概念 二、Maven的核心概…

【面试题】计算机网络面试实战

version&#xff1a;1.0 文章目录 计算机网络网络分层模型&#x1f64e;‍♂️面试官&#xff1a;网络为什么要分层&#xff1f;&#x1f64e;‍♂️面试官&#xff1a;TCP/IP 各层的结构与功能&#xff1f;&#x1f64e;‍♂️面试官&#xff1a;OSI体系模型的结构和功能&…

AI歌手是否能够取代传统歌手,成为主流音乐的新宠?

⭐ “AI歌手”走红背后&#xff1a;谁在训练它&#xff1f;歌迷为何爱听&#xff1f;⭐ 这种新型演艺模式能否获得广泛的市场认可&#xff1f;⭐ AI歌手会取代流行歌手成为主流吗&#xff1f;⭐ AI还在哪些方面有应用呢&#xff1f; 你听过AI歌手吗&#xff1f;近日&#xff0c…

机器学习 | 降维:PCA主成分分析

本文整理自 长路漫漫2021的原创博客&#xff1a;sklearn基础篇&#xff08;九&#xff09;-- 主成分分析&#xff08;PCA&#xff09;李春春_的原创博客&#xff1a;主成分分析&#xff08;PCA&#xff09;原理详解bilibili视频&#xff1a;用最直观的方式告诉你&#xff1a;什…

结构体入门调试技巧

目录 前言&#xff1a; 一.结构体 1.1结构体的初始化和访问 二.结构体传参 三.调试技巧 3.1VS里的版本 3.2调试功能介绍 四.好代码 4.1const修饰指针的两种位置 五.错误分类 ❤博主CSDN:啊苏要学习 ▶专栏分类&#xff1a;C语言◀ C语言的学习&#xff0c;是为我们今…