news 2026/4/12 13:28:13

Elasticsearch之原理详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Elasticsearch之原理详解

1 Elasticsearch

1.1 简介

ES是使用Java编写的一种开源搜索引擎,它在内部使用Lucene做索引与搜索,通过对Lucene的封装,隐藏了Lucene的复杂性,取而代之的提供一套简单一致的RESTful API
然而,Elasticsearch不仅仅是Lucene,并且也不仅仅只是一个全文搜索引擎。

它可以被下面这样准确的形容:

  • 一个分布式的实时文档存储,每个字段可以被索引与搜索。
  • 一个分布式实时分析搜索引擎。
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据。

官网对Elasticsearch的介绍是Elasticsearch是一个分布式、可扩展、近实时的搜索与数据分析引擎。

其中主要有如下几个核心术语需要理解:

  • 词条(Term): 索引里面最小的存储和查询单元,对于英文来说是一个单词,对于中文来说一般指分词后的一个词。
  • 词典(Term Dictionary): 或字典,是词条Term的集合。搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向倒排列表的指针。
  • 倒排表(Post list):一个文档通常由多个词组成,倒排表记录的是某个词在哪些文档里出现过以及出现的位置。每条记录称为一个倒排项(Posting)。倒排表记录的不仅是文档编号,还存储了词频等信息。
  • 倒排文件(Inverted File): 所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件
    由属性值来确定记录的位置的结构就是倒排索引。带有倒排索引的文件称为倒排文件

词典倒排表Lucene中很重要的两种数据结构,是实现快速检索的重要基石。词典倒排文件是分两部分存储的,词典在内存中倒排文件存储在磁盘

1.2 分片,副本,映射

1.2.1 分片(Shards)

ES支持PB级全文搜索,当索引上的数据量太大的时候,ES通过水平拆分的方式将一个索引上的数据拆分出来分配到不同的数据块上,拆分出来的数据库块称之为一个分片。
这类似于MySQL的分库分表,只不过MySQL分库分表需要借助第三方组件而ES内部自身实现了此功能。

在一个多分片的索引中写入数据时,通过路由来确定具体写入哪一个分片中,所以在创建索引的时候需要指定分片的数量,并且分片的数量一旦确定就不能修改。
分片的数量和下面介绍的副本数量都是可以通过创建索引时的Settings来配置,ES默认为一个索引创建 5 个主分片, 并分别为每个分片创建一个副本。

PUT /myIndex { "settings" : { "number_of_shards" : 5, "number_of_replicas" : 1 } }

ES通过分片的功能使得索引在规模上和性能上都得到提升,每个分片都是Lucene中的一个索引文件,每个分片必须有一个主分片零到多个副本

1.2.2 副本(Replicas)

副本就是对分片的Copy,每个主分片都有一个或多个副本分片,当主分片异常时,副本可以提供数据的查询等操作。
主分片和对应的副本分片是不会在同一个节点上的,所以副本分片数的最大值是 N-1(其中 N 为节点数)。
对文档的新建、索引和删除请求都是写操作,必须在主分片上面完成之后才能被复制到相关的副本分片。

ES为了提高写入的能力这个过程是并发写的,同时为了解决并发写的过程中数据冲突的问题,ES通过乐观锁的方式控制,每个文档都有一个_version (版本)号,当文档被修改时版本号递增。
一旦所有的副本分片都报告写成功才会向协调节点报告成功,协调节点向客户端报告成功

image.png

从上图可以看出为了达到高可用,Master节点会避免将主分片和副本分片放在同一个节点上。

假设这时节点Node1服务宕机了或者网络不可用了,那么主节点上主分片 S0 也就不可用了。幸运的是还存在另外两个节点能正常工作,这时ES会重新选举新的主节点,而且这两个节点上存在我们所需要的S0的所有数据。我们会将S0的副本分片提升为主分片,这个提升主分片的过程是瞬间发生的。此时集群的状态将会为Yellow

为什么我们集群状态是Yellow而不是Green呢?虽然我们拥有所有的 2 个主分片,但是同时设置了每个主分片需要对应两份副本分片,而此时只存在一份副本分片。所以集群不能为Green的状态。
如果我们同样关闭了Node2,我们的程序依然可以保持在不丢失任何数据的情况下运行,因为Node3为每一个分片都保留着一份副本。
如果我们重新启动Node1,集群可以将缺失的副本分片再次进行分配,那么集群的状态又将恢复到原来的正常状态。
如果Node1依然拥有着之前的分片,它将尝试去重用它们,只不过这时Node1节点上的分片不再是主分片而是副本分片了,如果期间有更改的数据只需要从主分片上复制修改的数据文件即可。

小结:

  • 将数据分片是为了提高可处理数据的容量和易于进行水平扩展,为分片做副本是为了提高集群的稳定性和提高并发量。
  • 副本是乘法,越多消耗越大,但也越保险。分片是除法,分片越多,单分片数据就越少也越分散。
  • 副本越多,集群的可用性就越高,但是由于每个分片都相当于一个 Lucene 的索引文件,会占用一定的文件句柄、内存及 CPU。并且分片间的数据同步也会占用一定的网络带宽,所以索引的分片数和副本数也不是越多越好。

1.2.3 映射(Mapping)

映射是用于定义ES对索引中字段的存储类型、分词方式和是否存储等信息,就像数据库中的Schema,描述了文档可能具有的字段或属性、每个字段的数据类型。
只不过关系型数据库建表时必须指定字段类型,而ES对于字段类型可以不指定然后动态对字段类型猜测,也可以在创建索引时具体指定字段的类型。
对字段类型根据数据格式自动识别的映射称之为动态映射(Dynamic Mapping),我们创建索引时具体定义字段类型的映射称之为静态映射或显示映射(Explicit Mapping)。

在讲解动态映射和静态映射的使用前,我们先来了解下 ES 中的数据有哪些字段类型?之后我们再讲解为什么我们创建索引时需要建立静态映射而不使用动态映射。

ES(v6.8)中字段数据类型主要有以下几类:

类别数据类型
核心类型text,keywords,long,integer,short,double,data,boolean
复杂类型Object,Nested
地理类型geo_point,geo_shape
特殊类型ip,completion,token_count,join

Text用于索引全文值的字段,例如电子邮件正文或产品说明。这些字段是被分词的,它们通过分词器传递 ,以在被索引之前将字符串转换为单个术语的列表。分析过程允许Elasticsearch搜索单个单词中每个完整的文本字段。文本字段不用于排序,很少用于聚合。
Keyword用于索引结构化内容的字段,例如电子邮件地址,主机名,状态代码,邮政编码或标签。它们通常用于过滤,排序,和聚合。Keyword 字段只能按其确切值进行搜索。

通过对字段类型的了解我们知道有些字段需要明确定义的,例如某个字段是 Text 类型还是 Keyword 类型差别是很大的,时间字段也许我们需要指定它的时间格式,还有一些字段我们需要指定特定的分词器等等。

如果采用动态映射是不能精确做到这些的,自动识别常常会与我们期望的有些差异。所以创建索引的时候一个完整的格式应该是指定分片和副本数以及 Mapping的定义,如下:

PUT my_index { "settings" : { "number_of_shards" : 5, "number_of_replicas" : 1 } "mappings": { "_doc": { "properties": { "title": { "type": "text" }, "name": { "type": "text" }, "age": { "type": "integer" }, "created": { "type": "date", "format": "strict_date_optional_time||epoch_millis" } } } } }

1.3 ES机制原理

1.3.1 写索引原理

下图描述了 3 个节点的集群,共拥有 12 个分片,其中有 4 个主分片(S0、S1、S2、S3)和 8 个副本分片(R0、R1、R2、R3),每个主分片对应两个副本分片,节点 1 是主节点(Master 节点)负责整个集群的状态。

image.png

写索引只能写在主分片上,然后同步到副本分片。这里有四个主分片,一条数据ES是根据什么规则写到特定分片上的呢?
这条索引数据为什么被写到 S0 上而不写到 S1 或 S2 上?那条数据为什么又被写到 S3 上而不写到 S0 上了?

首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了。实际上,这个过程是根据下面这个公式决定的:

shard = hash(routing) % number_of_primary_shards

Routing是一个可变值,默认是文档的_id,也可以设置成一个自定义的值。
Routing通过Hash函数生成一个数字,然后这个数字再除以number_of_primary_shards(主分片的数量)后得到余数。这个在0number_of_primary_shards-1之间的余数,就是我们所寻求的文档所在分片的位置。

这就解释了为什么我们要在创建索引的时候就确定好主分片的数量并且永远不会改变这个数量:因为如果数量变化了,那么所有之前路由的值都会无效,文档也再也找不到了

由于在ES集群中每个节点通过上面的计算公式都知道集群中的文档的存放位置,所以每个节点都有处理读写请求的能力。
在一个写请求被发送到某个节点后,该节点即为前面说过的协调节点协调节点会根据路由公式计算出需要写到哪个分片上,再将请求转发到该分片的主分片节点上

image.png

假如此时数据通过路由计算公式取余后得到的值是

shard=hash(routing)%4=0

则具体流程如下:

  • 客户端向ES1节点(协调节点)发送写请求,通过路由计算公式得到值为 0,则当前数据应被写到主分片 S0 上。
  • ES1节点将请求转发到S0主分片所在的节点 ES3,ES3 接受请求并写入到磁盘。
  • 并发将数据复制到两个副本分片R0上,其中通过乐观并发控制数据的冲突。一旦所有的副本分片都报告成功,则节点ES3将向协调节点报告成功,协调节点向客户端报告成功。

1.3.2 存储原理

上面介绍了在ES内部索引的写处理流程,这个流程是在ES内存中执行的,数据被分配到特定的分片副本上之后,最终是存储到磁盘上的,这样在断电的时候就不会丢失数据。
具体的存储路径可在配置文件../config/elasticsearch.yml中进行设置,默认存储在安装目录的Data文件夹下。
建议不要使用默认值,因为若ES进行了升级,则有可能导致数据全部丢失:

path.data: /path/to/data //索引数据 path.logs: /path/to/logs //日志记录
1.3.2.1 分段存储

索引文档以的形式存储在磁盘上,索引文件被拆分为多个子文件,则每个子文件叫作,每一个段本身都是一个倒排索引,并且段具有不变性,一旦索引的数据被写入硬盘,就不可再修改。

在底层采用了分段存储模式,使它在读写时几乎完全避免了锁的出现,大大提升了读写性能。
段被写入到磁盘后会生成一个提交点提交点是一个用来记录所有提交后段信息的文件。

一个段一旦拥有了提交点,就说明这个段只有读的权限,失去了写的权限。相反,当段在内存中时,就只有写的权限,而不具备读数据的权限,意味着不能被检索

段的概念提出主要是因为:在早期全文检索中为整个文档集合建立了一个很大的倒排索引,并将其写入磁盘中。如果索引有更新,就需要重新全量创建一个索引来替换原来的索引。这种方式在数据量很大时效率很低,并且由于创建一次索引的成本很高,所以对数据的更新不能过于频繁,也就不能保证时效性。

索引文件分段存储并且不可修改,那么新增、更新和删除如何处理呢?

  • 新增,新增很好处理,由于数据是新的,所以只需要对当前文档新增一个段就可以了。
  • 删除,由于不可修改,所以对于删除操作,不会把文档从旧的段中移除而是通过新增一个.del文件,文件中会列出这些被删除文档的段信息。这个被标记删除的文档仍然可以被查询匹配到, 但它会在最终结果被返回前从结果集中移除。
  • 更新,不能修改旧的段来进行反映文档的更新,其实更新相当于是删除新增这两个动作组成。会将旧的文档在.del文件中标记删除,然后文档的新版本被索引到一个新的段中。可能两个版本的文档都会被一个查询匹配到,但被删除的那个旧版本文档在结果集返回前就会被移除。

段被设定为不可修改具有一定的优势也有一定的缺点,优势主要表现在:

  • 不需要锁,如果从来不更新索引,那就不需要担心多进程同时修改数据的问题。
  • 一旦索引被读入内核的文件系统缓存,便会留在哪里,由于其不变性。只要文件系统缓存中还有足够的空间,那么大部分读请求会直接请求内存,而不会命中磁盘。这提供了很大的性能提升。
  • 其它缓存(像Filter缓存),在索引的生命周期内始终有效。它们不需要在每次数据改变时被重建,因为数据不会变化。
  • 写入单个大的倒排索引允许数据被压缩,减少磁盘I/O和需要被缓存到内存的索引的使用量。

段的不变性的缺点如下:

  • 当对旧数据进行删除时,旧数据不会马上被删除,而是在.del文件中被标记为删除。而旧数据只能等到段更新时才能被移除,这样会造成大量的空间浪费。
  • 若有一条数据频繁的更新,每次更新都是新增新的标记旧的,则会有大量的空间浪费。
  • 每次新增数据时都需要新增一个段来存储数据。当段的数量太多时,对服务器的资源例如文件句柄的消耗会非常大。
  • 在查询的结果中包含所有的结果集,需要排除被标记删除的旧数据,这增加了查询的负担。
1.3.2.2 延迟写策略

介绍完了存储的形式,那么索引写入到磁盘的过程是怎样的?是否是直接调Fsync物理性地写入磁盘?
答案是显而易见的,如果是直接写入到磁盘上,磁盘的I/O消耗上会严重影响性能。那么当写数据量大的时候会造成ES停顿卡死,查询也无法做到快速响应。如果真是这样ES也就不会称之为近实时全文搜索引擎了。

为了提升写的性能,ES并没有每新增一条数据就增加一个段到磁盘上,而是采用延迟写的策略。每当有新增的数据时,就将其先写入到内存中,在内存磁盘之间是文件系统缓存
当达到默认的时间(1 秒钟)或者内存的数据达到一定量时,会触发一次刷新(Refresh),将内存中的数据生成到一个新的段上并缓存到文件缓存系统 上,稍后再被刷新到磁盘中并生成提交点。
这里的内存使用的是ESJVM内存,而文件缓存系统使用的是操作系统的内存。

新的数据会继续的被写入内存,但内存中的数据并不是以段的形式存储的,因此不能提供检索功能。由内存刷新到文件缓存系统的时候会生成新的段,并将段打开以供搜索使用,而不需要等到被刷新到磁盘。

Elasticsearch中,写入和打开一个新段的轻量的过程叫做Refresh(即内存刷新到文件缓存系统)。默认情况下每个分片会每秒自动刷新一次。这就是为什么我们说Elasticsearch近实时搜索,因为文档的变化并不是立即对搜索可见,但会在一秒之内变为可见。
我们也可以手动触发RefreshPOST /_refresh刷新所有索引,POST /nba/_refresh刷新指定的索引。

注意:尽管刷新是比提交轻量很多的操作,它还是会有性能开销。当写测试的时候, 手动刷新很有用,但是不要在生产环境下每次索引一个文档都去手动刷新。而且并不是所有的情况都需要每秒刷新。

假如正在使用Elasticsearch索引大量的日志文件, 想优化索引速度而不是近实时搜索。这时可以在创建索引时在Settings中通过调大refresh_interval = "30s"的值 , 降低每个索引的刷新频率,设值时需要注意后面带上时间单位,否则默认是毫秒。当refresh_interval=-1时表示关闭索引的自动刷新。

虽然通过延时写的策略可以减少数据往磁盘上写的次数并提升了整体的写入能力,但是我们知道文件缓存系统也是内存空间,属于操作系统的内存,只要是内存都存在断电或异常情况下丢失数据的危险。
为了避免丢失数据,Elasticsearch添加了事务日志(Translog),事务日志记录了所有还没有持久化到磁盘的数据

image.png

添加了事务日志后整个写索引的流程如上图所示:

  • 一个新文档被索引之后,先被写入到内存中,但是为了防止数据的丢失,会追加一份数据到事务日志中。
  • 不断有新的文档被写入到内存,同时也都会记录到事务日志中。这时新数据还不能被检索和查询。
  • 当达到默认的刷新时间或内存中的数据达到一定量后,会触发一次Refresh,将内存中的数据以一个新段形式刷新到文件缓存系统中并清空内存。这时虽然新段未被提交到磁盘,但是可以提供文档的检索功能且不能被修改。
  • 随着新文档索引不断被写入,当日志数据大小超过512M或者时间超过 30 分钟时,会触发一次Flush
  • 内存中的数据被写入到一个新段同时被写入到文件缓存系统,文件系统缓存中数据通过Fsync刷新到磁盘中,生成提交点,日志文件被删除,创建一个空的新日志。

通过这种方式当断电或需要重启时,ES不仅要根据提交点去加载已经持久化过的段,还需要工具Translog里的记录,把未持久化的数据重新持久化到磁盘上,避免了数据丢失的可能。

1.3.2.3 段合并

由于自动刷新流程每秒会创建一个新的段 ,这样会导致短时间内的段数量暴增。而段数目太多会带来较大的麻烦。每一个段都会消耗文件句柄、内存和 CPU 运行周期。更重要的是,每个搜索请求都必须轮流检查每个段然后合并查询结果,所以段越多,搜索也就越慢。

Elasticsearch通过在后台定期进行段合并来解决这个问题。小的段被合并到大的段,然后这些大的段再被合并到更大的段。

段合并的时候会将那些旧的已删除文档从文件系统中清除。被删除的文档不会被拷贝到新的大段中。合并的过程中不会中断索引和搜索。

image.png

段合并在进行索引和搜索时会自动进行,合并进程选择一小部分大小相似的段,并且在后台将它们合并到更大的段中,这些段既可以是未提交的也可以是已提交的
合并结束后老的段会被删除,新的段被Flush到磁盘,同时写入一个包含新段且排除旧的和较小的段的新提交点,新的段被打开可以用来搜索。

段合并的计算量庞大, 而且还要吃掉大量磁盘 I/O,段合并会拖累写入速率,如果任其发展会影响搜索性能。
Elasticsearch在默认情况下会对合并流程进行资源限制,所以搜索仍然有足够的资源很好地执行。

1.4 性能优化

1.4.1 存储设备

磁盘在现代服务器上通常都是瓶颈。Elasticsearch重度使用磁盘,磁盘能处理的吞吐量越大,节点就越稳定。

这里有一些优化磁盘 I/O 的技巧:

  • 使用 SSD。比机械磁盘优秀多了。
  • 使用 RAID 0。条带化 RAID 会提高磁盘 I/O,代价显然就是当一块硬盘故障时整个就故障了。不要使用镜像或者奇偶校验 RAID 因为副本已经提供了这个功能。
  • 使用多块硬盘,并允许Elasticsearch通过多个path.data目录配置把数据条带化分配到它们上面。
  • 不要使用远程挂载的存储,比如 NFS 或者 SMB/CIFS。这个引入的延迟对性能来说完全是背道而驰的。

1.4.2 内部索引优化

image.png

Elasticsearch为了能快速找到某个Term,先将所有的Term排个序,然后根据二分法查找Term,时间复杂度为logN,就像通过字典查找一样,这就是Term Dictionary
现在再看起来,似乎和传统数据库通过B-Tree的方式类似。但是如果 Term 太多,Term Dictionary也会很大,放内存不现实,于是有了Term Index
就像字典里的索引页一样,A 开头的有哪些 Term,分别在哪页,可以理解Term Index是一棵树。这棵树不会包含所有的Term,它包含的是Term的一些前缀。通过Term Index可以快速地定位到Term Dictionary的某个Offset,然后从这个位置再往后顺序查找。

在内存中用FST方式压缩Term IndexFST以字节的方式存储所有的Term,这种压缩方式可以有效的缩减存储空间,使得Term Index足以放进内存,但这种方式也会导致查找时需要更多的 CPU 资源。

对于存储在磁盘上的倒排表同样也采用了压缩技术减少存储所占用的空间。

1.4.3 调整配置参数

调整配置参数建议如下:

  • 给每个文档指定有序的具有压缩良好的序列模式 ID,避免随机的UUID-4这样的 ID,这样的 ID 压缩比很低,会明显拖慢 Lucene。
  • 对于那些不需要聚合和排序的索引字段禁用Doc valuesDoc Values是有序的基于document=>field value的映射列表。
  • 不需要做模糊检索的字段使用Keyword类型代替 Text 类型,这样可以避免在建立索引前对这些文本进行分词。
  • 如果搜索结果不需要近实时的准确度,考虑把每个索引的index.refresh_interval改到30s
  • 如果在做大批量导入,导入期间可以通过设置这个值为-1关掉刷新,还可以通过设置index.number_of_replicas: 0关闭副本。别忘记在完工的时候重新开启它。
  • 避免深度分页查询建议使用Scroll进行分页查询。普通分页查询时,会创建一个from+size的空优先队列,每个分片会返回from+size条数据,默认只包含文档 ID 和得分 Score 给协调节点。
  • 如果有 N 个分片,则协调节点再对(from+size)×n条数据进行二次排序,然后选择需要被取回的文档。当from很大时,排序过程会变得很沉重,占用 CPU 资源严重。
  • 减少映射字段,只提供需要检索,聚合或排序的字段。其他字段可存在其他存储设备上,例如 Hbase,在 ES 中得到结果后再去 Hbase 查询这些字段。
  • 创建索引和查询时指定路由Routing值,这样可以精确到具体的分片查询,提升查询效率。路由的选择需要注意数据的分布均衡。

1.5 与关系型数据库联系

1.5.1 与SQL发展

众所周知,Elasticsearch是一个基于Apache LuceneLucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

Elasticsearch是一种NoSQL数据库(非关系型数据库),和常规的关系型数据库(比如:MySQL,Oralce等)的基本概念,对应关系如下:

  • Elasticsearch:index --> type --> doc --> field
  • MySQL:数据库 --> 数据表 --> 行 --> 列

因为关系型数据库比非关系型数据库的概念提出的早,而且很成熟,应用广泛。所以,后来很多NoSQL(包括:MongoDBElasticsearch等)都参考并延用了传统关系型数据库的基本概念。

1.5.2 ES去除表 type

一个客观的现象和事实是Elasticsearch官网提出的近期版本对type概念的演变情况如下:

  • 5.X版本中,一个 index 下可以创建多个 type;
  • 6.X版本中,一个 index 下只能存在一个 type;
  • 7.X版本中,直接去除了 type 的概念,就是说 index 不再会有 type。

为何要去除 type 的概念?
为何不是在 6.X 版本开始就直接去除 type,而是要逐步去除type?

为何要去除 type 的概念?

因为Elasticsearch设计初期,是直接查考了关系型数据库的设计模式,存在了type(数据表)的概念。
但是,其搜索引擎是基于Lucene的,这种 “基因”决定了type是多余的。Lucene的全文检索功能之所以快,是因为倒序索引的存在。
而这种倒序索引的生成是基于index的,而并非type。多个type反而会减慢搜索的速度。
为了保持Elasticsearch一切为了搜索 的宗旨,适当的做些改变(去除 type)也是无可厚非的,也是值得的。

为何不是在 6.X 版本开始就直接去除 type,而是要逐步去除type?

因为历史原因,前期Elasticsearch支持一个index下存在多个type的,而且,有很多项目在使用Elasticsearch作为数据库。
如果直接去除 type 的概念,不仅是很多应用Elasticsearch的项目将面临 业务、功能和代码的大改,
而且对于Elasticsearch官方来说,也是一个巨大的挑战(这个是伤筋动骨的大手术,很多涉及到type源码是要修改的)。
所以,权衡利弊,采取逐步过渡的方式,最终,推迟到7.X版本才完成去除 type这个 革命性的变革。

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 2:15:11

用Z-Image-Turbo做了个电商海报,效果超出预期

用Z-Image-Turbo做了个电商海报,效果超出预期 1. 为什么选Z-Image-Turbo做电商海报? 做电商运营的朋友都知道,一张好海报有多难:要突出产品、吸引眼球、传递品牌调性,还得兼顾手机端和PC端的显示效果。以前靠设计师一…

作者头像 李华
网站建设 2026/4/12 12:25:51

Face3D.ai Pro快速部署:基于ModelScope pipeline的轻量化3D重建服务封装

Face3D.ai Pro快速部署:基于ModelScope pipeline的轻量化3D重建服务封装 1. 这不是又一个“上传照片生成3D脸”的玩具 你可能见过不少类似功能的网页工具——点几下、等几秒、弹出一张带网格线的3D头像。但Face3D.ai Pro不一样。它不追求花哨的动画或社交分享按钮…

作者头像 李华
网站建设 2026/4/11 19:05:39

GLM-4.7-Flash一文详解:Flash版本与标准GLM-4.7性能对比基准

GLM-4.7-Flash一文详解:Flash版本与标准GLM-4.7性能对比基准 1. 为什么需要GLM-4.7-Flash?——从“能用”到“好用”的关键跃迁 你有没有遇到过这样的情况:手头有个很厉害的大模型,但一打开网页界面就卡在“加载中”&#xff0c…

作者头像 李华
网站建设 2026/4/6 2:28:19

初探PCB制造:电镀+蚀刻基础步骤详解

以下是对您提供的技术博文《初探PCB制造:电镀与蚀刻基础步骤深度技术解析》的 全面润色与专业重构版本 。本次优化严格遵循您的核心要求: ✅ 彻底去除AI痕迹 :摒弃模板化表达、空洞总结与机械过渡,代之以工程师真实工作语境中的逻辑流、经验判断与现场洞察; ✅ 强化…

作者头像 李华
网站建设 2026/4/9 10:15:31

手把手教你跑通MGeo镜像,无需深度学习背景

手把手教你跑通MGeo镜像,无需深度学习背景 1. 为什么普通人也能轻松上手MGeo? 你可能已经听说过“地址匹配”这个词——比如把“北京市朝阳区望京SOHO塔3”和“北京望京SOHO”判断为同一个地方。这背后不是靠人工查地图,而是由像MGeo这样的…

作者头像 李华
网站建设 2026/4/5 13:49:23

超详细图文教程:Qwen3-1.7B本地部署全过程

超详细图文教程:Qwen3-1.7B本地部署全过程 你是否也想在自己的机器上跑起最新发布的千问大模型,不依赖云端API、不担心调用限制、随时可调试、完全可控?2025年4月底刚开源的Qwen3系列中,Qwen3-1.7B 是兼顾性能与资源消耗的“甜点…

作者头像 李华