终于有人把Elasticsearch原理讲透了

素颜马尾好姑娘i 2022-08-28 01:45 339阅读 0赞

转自:终于有人把Elasticsearch原理讲透了! - 51CTO.COM

小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了。

随着央视诗词大会的热播,小史开始对诗词感兴趣,最喜欢的就是飞花令的环节。

10a32222b88d0f8e4ecd834ce631704b.png

3dfbef3e51eb8d0c117329e5681b038a.png

但是由于小史很久没有背过诗词了,飞一个字很难说出一句,很多之前很熟悉的诗句也想不起来。

85e3810a5200bd9c86f6705416a4f2e0.png

5d3ad0f242b6e90b4a9e8f48d8500366.png

5e5741a5eaf8bccd0c247a80ee636296.png

ad900cb969bd1c5cd4f48a9c4a750172.png

3929ba5e71a404dc3b339725322a832d.png

37917bb860eb0b21b76b665a036b4df0.png

b3d33108a4c7b21307c7caa68c623dd7.png

5bc2956038e5b0d39415a905a4b2c420.png

cbf671509a549be7e2c527875e4f98e4.png

e0179b5fe2e0f575ee3e6991d96477cd.png

倒排索引

f1da5f5877809a80648bcd2dfda166e1.png

e2a083207ecd3e3d465602376e2a7ec9.png

42dad283e8b0b83a7342ba4d9cee7328.png

d20797597790cdafdcb3c7f982670e00.png

1d6bb9c26a2f5b6b06cc9f3548316e5a.png

b75d7eb4fba13c0ef2929d63c0ae2b62.png

吕老师:但是我让你说出带“前”字的诗句,由于没有索引,你只能遍历脑海中所有诗词,当你的脑海中诗词量大的时候,就很难在短时间内得到结果了。

4c28e1dc8e60353983a82082cb2dc83c.png

b607206a5570c41acf9d7f5ceaeaf374.png

e04796e53b95b3a75f8fa1608fbf711d.png

a57105bdc330c992651bc622ae03aee8.png

4a52983134f728f5aad7260b973333f4.png

5d4fd128d0b802e594daf8c78bd8aff4.png

6662f564d3bca2ccfffdbe59d3c5d0a3.png

索引量爆炸

1b834b6922b463da12d0dbd7d186403a.png

cb3438188dae085230f0ee87e0908d2c.png

3f66d5e5bc6ad4bdc379910a1e928a67.png

51031df4135307be15191e93ead1899d.png

8ae7d5322fd19a95836b91264e3caa19.png

9264248f35fb29511e2ee1c9e9f4763c.png

0269ef4a941df2f128984b8458bca2c8.png

f52aca3c22587985525253ea9173e747.png

e5ab15e2beb2620083b58dbfa7ad7dfd.png

5e6cce5bb9b47c4ffaf618e4a8a32bda.png

41d95b51da2b1c7e655b27faa3b5aa8a.png

eb46cf76384996c7de8ee3e7c14afef1.png

b97a9ff32b2a72661901451a5b0d3c84.png

110ec057ea7ef565e286b11c116ad423.png

99e4e53ece6cd43993d2316ded7de91a.png

adc908b352e8c3b20ca2cad88a5df9e8.png

dfd1d91ce0ff863c84693157a37f3980.png

7b8197270e7e8a55ad7faced9ed139d7.png

650f57a3ac04b2fd0ff1cf60d00dcbd7.png

搜索引擎原理

65f96cb9c6dfb7c267e720528734ab60.png

aca8ab19e5f22f9717b5a2d27bdcb8ff.png

be421d9067ee854afa5f4010c97cae22.png

885c5239739d3ed8ab023816725e1f97.png

ba4b027d00d9baa5a92d3ca9a09704c7.png

b52817221652523df4ff635dccb074f0.png

82baf8c576f912e631f8ecb3472da70f.png

15d3810040cd17cb919373acbe7feb90.png

8f200b65e543d8868f26437c319f8a35.png

e6106f1c68e80d797f974256cea98d24.png

9685fd52d7679ed0d5b4f7965068e251.png

448102b6b9497cf44fd25d98fc3b895d.png

abd6638284758727c3b9af45dabe8474.png

d4497718c05963875672ad83e3110828.png

bbb183758635c3067a0da829251e7be2.png

Elasticsearch 简介

df5a06640348a16734943efe8bbc773f.png

24874c3aba44cb5879b11bf4b3f41f7c.png

f829a7036a9dc77cf38b908805fd9429.png

fe3f2cd4487c0c9dd789b801044a5020.png

397fbdbb66c991e029aff1fc240f741b.png

吕老师:但是 Lucene 还是一个库,必须要懂一点搜索引擎原理的人才能用的好,所以后来又有人基于 Lucene 进行封装,写出了 Elasticsearch。

925b99e38626607d59b403591e93fe25.png

f4f0641587de0f40c89be9853f4757df.png

0daec8ce3ff81c4f15fb070ed3b82fed.png

d505c7477b7bb6f51869e044302e9fab.png

684c395a24ba127fb56de9471af9a6e6.png

0ffe39e7c00459266db659bea357d897.png

Elasticsearch 基本概念

4ee4d8c39e69ed4e47dcf9d6914e905b.png

cc3026e468a02f5a5536fb837d660fee.png

5aa5bc14b58c81edf8226d917e456259.png

615da978adec4c46fd149deba7d02c25.png

97d9dc9ca9b9e16874db240c235ff07b.png

吕老师:类型是用来定义数据结构的,你可以认为是 MySQL 中的一张表。文档就是最终的数据了,你可以认为一个文档就是一条记录。

647ca5b107b007759816830b0ef0e28f.png

0fe84a2e01b92f8e53676ed4136b631b.png

f471ea31548a781c1b2372412f8990c6.png

吕老师:比如一首诗,有诗题、作者、朝代、字数、诗内容等字段,那么首先,我们可以建立一个名叫 Poems 的索引,然后创建一个名叫 Poem 的类型,类型是通过 Mapping 来定义每个字段的类型。

比如诗题、作者、朝代都是 Keyword 类型,诗内容是 Text 类型,而字数是 Integer 类型,***就是把数据组织成 Json 格式存放进去了。

b54c9fd54cb4d1cf4603f9dc704fb947.png

eddbaf277efcbd17f2c8e5ef6b529e69.png

c2926b07d9139a0e6fc651e5fbb579fd.png

吕老师:这个问题问得好,这涉及到分词的问题,Keyword 类型是不会分词的,直接根据字符串内容建立反向索引,Text 类型在存入 Elasticsearch 的时候,会先分词,然后根据分词后的内容建立反向索引。

74bde8083ed85a012486f5a89f374b48.png

ba88865c94b8cbb367d6ef396facd035.png

d6160da3ca048cff907e30f211a6d7bd.png

吕老师:之前我们说过,Elasticsearch 把操作都封装成了 HTTP 的 API,我们只要给 Elasticsearch 发送 HTTP 请求就行。

比如使用 curl -XPUT ‘http://ip:port/poems',就能建立一个名为 Poems 的索引,其他操作也是类似的。

06c931c7fe101055acc6100d35804469.png

Elasticsearch 分布式原理

35b74ba18bb7f1b9551cac4a7764f332.png

03e032b336497188112ea85308087fdd.png

吕老师:没错,Elasticsearch 也是会对数据进行切分,同时每一个分片会保存多个副本,其原因和 HDFS 是一样的,都是为了保证分布式环境下的高可用。

58945247c362f8b3fc1f619f48b45b9a.png

414b4e93732517415b614392d6363d0a.png

a2f4bb3fb69888cb5d488040fc223786.png

吕老师:没错,在 Elasticsearch 中,节点是对等的,节点间会通过自己的一些规则选取集群的 Master,Master 会负责集群状态信息的改变,并同步给其他节点。

e84d87495b67030b4b745a4c7629d29f.png

9c0683c4b1f089d927dd2acf693fae42.png

62e72707a470b5ebb3aee18a815c90d3.png

c16790587221d9b64b818c3cfad9a5d9.png

179378b4f90855ddbea6bb2567b9b2d2.png

吕老师:注意,只有建立索引和类型需要经过 Master,数据的写入有一个简单的 Routing 规则,可以 Route 到集群中的任意节点,所以数据写入压力是分散在整个集群的。

a450726868718f1092224809316b1d44.png

ELK 系统

140563475a59b81aca683cff80b6057f.png

c8c3dd54b36d56f36dd40c757463db98.png

吕老师:其实很多公司都用 Elasticsearch 搭建 ELK 系统,也就是日志分析系统。其中 E 就是 Elasticsearch,L 是 Logstash,是一个日志收集系统,K 是 Kibana,是一个数据可视化平台。

3aa3ec7ba106e2a17743eaf4e5c34411.png

f04234dd08bd1c1696c1161ca2c3e3c5.png

3dbd982ddddcb1b764103cf50c32a60a.png

吕老师:分析日志的用处可大了,你想,假如一个分布式系统有 1000 台机器,系统出现故障时,我要看下日志,还得一台一台登录上去查看,是不是非常麻烦?

bc198d84c59953fd6bd3d102a9684003.png

c272635bc01b73915a035bc76501b2d8.png

吕老师:但是如果日志接入了 ELK 系统就不一样。比如系统运行过程中,突然出现了异常,在日志中就能及时反馈,日志进入 ELK 系统中,我们直接在 Kibana 就能看到日志情况。如果再接入一些实时计算模块,还能做实时报警功能。

d1d0459c684c1a2226348a0de76316b8.png

61717623cf47481fac250be36887033c.png

总结

小史学完了 Elasticsearch,在笔记本上写下了如下记录:

  • 反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
  • 搜索引擎原理就是建立反向索引。
  • Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。
  • Elasticsearch 中的索引、类型和文档的概念比较重要,类似于 MySQL 中的数据库、表和行。
  • Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。
  • Elasticsearch 一个典型应用就是 ELK 日志分析系统。

写完,又高高兴兴背诗去了。

观书有感(朱熹)

半亩方塘一鉴开,天光云影共徘徊。

问渠那得清如许?为有源头活水来。

发表评论

表情:
评论列表 (有 0 条评论,339人围观)

还没有评论,来说两句吧...

相关阅读

    相关 终于Python明白

    Python 因为其优越的特性广泛应用于数据分析、人工智能、Web 开发、后端开发、自动化测试/运维、爬虫等领域,也得到了很多企业的青睐。 甚至连BATZJ的技术大牛都无可否

    相关 终于SaaS明白

    导读:本文通过回顾SaaS的演进过程,帮助读者了解SaaS如何从一种服务托管技术和按需使用模式,发展成为今天企业服务的主流形式。 作者:代珂 来源:大数据DT(ID:hzd