终于有人把Elasticsearch原理讲透了!
小史是一个非科班的程序员,虽然学的是电子专业,可是经过本身的努力成功经过了面试,如今要开始迎接新生活了。程序员
小史是一个非科班的程序员,虽然学的是电子专业,可是经过本身的努力成功经过了面试,如今要开始迎接新生活了。面试
随着央视诗词大会的热播,小史开始对诗词感兴趣,最喜欢的就是飞花令的环节数据库
可是因为小史好久没有背过诗词了,飞一个字很难说出一句,不少以前很熟悉的诗句也想不起来。数据结构
倒排索引架构
吕老师:可是我让你说出带“前”字的诗句,因为没有索引,你只能遍历脑海中全部诗词,当你的脑海中诗词量大的时候,就很难在短期内获得结果了。app
索引量爆炸curl
搜索引擎原理分布式
Elasticsearch 简介搜索引擎
吕老师:可是 Lucene 仍是一个库,必需要懂一点搜索引擎原理的人才能用的好,因此后来又有人基于 Lucene 进行封装,写出了 Elasticsearch。url
Elasticsearch 基本概念
吕老师:类型是用来定义数据结构的,你能够认为是 MySQL 中的一张表。文档就是最终的数据了,你能够认为一个文档就是一条记录。
吕老师:好比一首诗,有诗题、做者、朝代、字数、诗内容等字段,那么首先,咱们能够创建一个名叫 Poems 的索引,而后建立一个名叫 Poem 的类型,类型是经过 Mapping 来定义每一个字段的类型。
好比诗题、做者、朝代都是 Keyword 类型,诗内容是 Text 类型,而字数是 Integer 类型,***就是把数据组织成 Json 格式存放进去了。
吕老师:这个问题问得好,这涉及到分词的问题,Keyword 类型是不会分词的,直接根据字符串内容创建反向索引,Text 类型在存入 Elasticsearch 的时候,会先分词,而后根据分词后的内容创建反向索引。
吕老师:以前咱们说过,Elasticsearch 把操做都封装成了 HTTP 的 API,咱们只要给 Elasticsearch 发送 HTTP 请求就行。
好比使用 curl -XPUT 'http://ip:port/poems',就能创建一个名为 Poems 的索引,其余操做也是相似的。
Elasticsearch 分布式原理
吕老师:没错,Elasticsearch 也是会对数据进行切分,同时每个分片会保存多个副本,其缘由和 HDFS 是同样的,都是为了保证分布式环境下的高可用。
吕老师:没错,在 Elasticsearch 中,节点是对等的,节点间会经过本身的一些规则选取集群的 Master,Master 会负责集群状态信息的改变,并同步给其余节点。
吕老师:注意,只有创建索引和类型须要通过 Master,数据的写入有一个简单的 Routing 规则,能够 Route 到集群中的任意节点,因此数据写入压力是分散在整个集群的。
ELK 系统
吕老师:其实不少公司都用 Elasticsearch 搭建 ELK 系统,也就是日志分析系统。其中 E 就是 Elasticsearch,L 是 Logstash,是一个日志收集系统,K 是 Kibana,是一个数据可视化平台。
吕老师:分析日志的用处可大了,你想,假如一个分布式系统有 1000 台机器,系统出现故障时,我要看下日志,还得一台一台登陆上去查看,是否是很是麻烦?
吕老师:可是若是日志接入了 ELK 系统就不同。好比系统运行过程当中,忽然出现了异常,在日志中就能及时反馈,日志进入 ELK 系统中,咱们直接在 Kibana 就能看到日志状况。若是再接入一些实时计算模块,还能作实时报警功能。
总结
小史学完了 Elasticsearch,在笔记本上写下了以下记录:
- 反向索引又叫倒排索引,是根据文章内容中的关键字创建索引。
- 搜索引擎原理就是创建反向索引。
- Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。
- Elasticsearch 中的索引、类型和文档的概念比较重要,相似于 MySQL 中的数据库、表和行。
- Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。
- Elasticsearch 一个典型应用就是 ELK 日志分析系统。
写完,又高高兴兴背诗去了。
观书有感(朱熹)
半亩方塘一鉴开,天光云影共徘徊。
问渠那得清如许?为有源头活水来。