资讯专栏INFORMATION COLUMN

谈Elasticsearch原理

IT那活儿 / 1885人阅读
谈Elasticsearch原理

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

前  言
大家都知道,ES是一个基于restful web接口并且构建在Apache Lucene之上的开源分布式搜索引擎。
今天在某乎上看到一篇关于Elasticsearch(以下简称ES)原理的介绍,感觉非常有意思,在这里和大家一起分享一下。

01


倒排索引思想


引申是说出带“前”的诗句,很多人都会想不起来有哪些诗句,但是如果让说出静夜思这首诗的内容,很多人都会脱口而出“床前明月光…”,但是为什么都会的诗句换一种问法就说不出来了呢,原来是我们的脑子里没有建立“倒排索引”。
平时大家背诗都是先记录诗名、作者然后是诗句的内容,这就是我们脑子里建立的“索引”。
但是让说出带“前”字的诗句,由于没有索引,你只能遍历脑海中所有诗词,当你的脑海中诗词量大的时候,就很难在短时间内得到结果了。
那么什么是倒排索引呢?
倒排索引又叫反向索引,比如这样建立索引。
如果这样建立索引,那么让说出带“前”的诗句,就能很快想到。这就是倒排索引,以诗句中的一些关键字作为索引,来找到诗句。

02


搜索引擎原理


但是,可能大家会产生一个疑问,静夜思这首诗,总共有20个字,那么这20个字都可以作为关键字来建立索引。
本来正向只有一个索引,反向确有20个索引,数据量会增加很多。
那么怎么办呢?
这就说涉及到了数据压缩,在建立反向索引的时候不需要索引倒诗句,只需要索引到诗名就行。比如这么建立索引:
value不存诗句改存诗名,数据量会少很多。通过关键字来建立反向索引,这种搜索引擎的原理和某度、某歌有些类似。都是根据一个内容来找到想要的文章。只不过流程稍复杂,多了网页爬取、停顿词过滤等。
网页爬取就是所谓的爬虫,停顿次过滤是指如“的”、“而”之类的本身没有多大意义的词,建立索引的时候就不需要考虑他们了,相当于所谓的“分词”。
搜索引擎都是对文章进行分词后,再按关键词建立倒排索引。

03


ES数据存储原理


有人要问了,我自己怎么实现一个搜索引擎呢,业界其实已经有“轮子”了,有一个叫Lucene的库,用它就可以很方便的建立倒排索引。
但是 Lucene 还是一个库,必须要懂一点搜索引擎原理的人才能用的好,所以后来又有人基于 Lucene 进行封装,写出了 ES。
ES将对搜索引擎的操作都封装成了restful的api,通过http请求就能对其进行操作。同时还考虑了海量数据,实现了分布式,是一个可以存海量数据的分布式搜索引擎。
那么数据怎么存储到ES里的呢,通过下图的比较,以加深大家对ES的认识。
比如一首诗,有诗题、作者、朝代、字数、诗内容等字段,那么首先,我们可以建立一个名叫 Poems 的索引,然后创建一个名叫 Poem 的类型,类型是通过 Mapping 来定义每个字段的类型。
比如诗题、作者、朝代都是 Keyword 类型,诗内容是 Text 类型,而字数是 Integer 类型,最后就是把数据组织成 Json 格式存放进去了。
类型相当于表结构的描述,文档以json格式描述一行数据。

04


ES分布式原理


ES中的数据是怎么进行分布式存储的呢?
其实,ES是会对数据进行切分,同时每个分片会保存多个副本,其原因和 HDFS 是一样的,都是为了保证分布式环境下的高可用。
因此,ES也是master-slave架构的,在ES中,节点是对等的,节点间会通过自己的一些规则选取集群的 Master,Master 会负责集群状态信息的改变,并同步给其他节点。
比如建立一个索引,请求先发送到mater,mater建立索引后,讲集群状态同步到slave。
注意,只有建立索引和类型需要经过 Master,数据的写入有一个简单的 Routing 规则,可以 Route 到集群中的任意节点,所以数据写入压力是分散在整个集群的。


本文作者:叶绪瑞

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129639.html

相关文章

  • 跳槽季如何快速全面复习面试题

    摘要:排序算法和集合工具类排序算法和集合工具类。面试官总是问排序算法也不是在难为你,而是在考察你的编程功底。你首先要理解多线程不仅仅是和那么简单,整个并发包下面的工具都是在为多线程服务。 去年的这个时候楼主通过两个月的复习拿到了阿里巴巴的 offer,有一些运气,也有一些心得,借着跳槽季来临特此分享出来。简单梳理一下我的复习思路,同时也希望和大家一起交流讨论,一起学习,如果不对之处欢迎指正一...

    keke 评论0 收藏0
  • 两年了,我写了这些干货!

    摘要:开公众号差不多两年了,有不少原创教程,当原创越来越多时,大家搜索起来就很不方便,因此做了一个索引帮助大家快速找到需要的文章系列处理登录请求前后端分离一使用完美处理权限问题前后端分离二使用完美处理权限问题前后端分离三中密码加盐与中异常统一处理 开公众号差不多两年了,有不少原创教程,当原创越来越多时,大家搜索起来就很不方便,因此做了一个索引帮助大家快速找到需要的文章! Spring Boo...

    huayeluoliuhen 评论0 收藏0
  • Elasticsearch Lucene 数据写入原理 | ES 核心篇

    摘要:因为倒排索引打分机制全文检索原理分词原理等等,这些都是不会过时的技术。中,单个倒排索引文件称为。其中有一个文件,记录了所有的信息,称为文档新写入时,会生成新的。过程上个过程中在文件系统缓存中,会有意外故障文档丢失。写入次怕后,清空。 前言 最近 TL 分享了下 《Elasticsearch基础整理》,蹭着这个机会。写个小文巩固下,本文主要讲 ES -> Lucene的底层结构,然后详细...

    wums 评论0 收藏0
  • 7月第4周业务风控关注 | 广电总局下发《关于加强网上话(访)类节目管理的通知》

    摘要:今日,宣布与美国监管部门达成和解。十一结束侵犯儿童隐私调查谷歌或罚款万美元美国联邦贸易委员会已经加大罚款力度,重拳打击隐私泄漏。 易盾业务风控周报每周报道值得关注的安全技术和事件,包括但不限于内容安全、移动安全、业务安全和网络安全,帮助企业提高警惕,规避这些似小实大、影响业务健康发展的安全风险。 ​showImg(https://segmentfault.com/img/bVbvDbN...

    DDreach 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<