- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图解 ElasticSearch 原理,你可收好了!
Richaaaard
2021-03-07
Elasticsearch 是一款功能强大的开源分布式搜索与数据分析引擎,目前国内诸多互联网大厂都在使用,包括携程、滴滴、今日头条、饿了么、360 平安、小米、vivo 等。
除了搜索之外,结合 Kibana、Logstash、Beats,Elastic Stack 还被广泛运用在大数据近实时分析领域,包括日志分析、目标监控、信息平安等多个领域。
它可以挂念你探究海量结构化、非结构化数据,按需创建可视化报表,对监控数据设置报警阈值,甚至通过使用机器学习技术,自动识别特别情况。
今日,我们先自上而下,后自底向上的引见ElasticSearch的底层工作原理,并试图回答以下问题:
为什么我的搜索 foo-bar 无法婚配 foo-bar ?
为什么添加更多的文件会压缩索引(Index)?
为什么 ElasticSearch 占用很多内存?
图解 ElasticSearch
Elasticsearch 版本:elasticsearch-2.2.0。
云上的集群
如下图:
集群里的盒子
云里面的每个白色正方形的盒子代表一个节点——Node。
节点之间
在一个或者多个节点直接,多个绿色小方块组合在一起构成一个 ElasticSearch 的索引。
索引里的小方块
在一个索引下,分布在多个节点里的绿色小方块称为分片——Shard。
Shard=Lucene Index
一个 ElasticSearch 的 Shard 本质上是一个 Lucene Index。
Lucene 是一个 Full Text 搜索库(也有很多其他方式的搜索库),ElasticSearch 是建立在 Lucene 之上的。
接下来的故事要说的大部分内容实际上是 ElasticSearch 如何基于 Lucene 工作的。
图解 Lucene
Mini 索引:Segment
在 Lucene 里面有很多小的 Segment,我们可以把它们看成 Lucene 内部的 mini-index。
Segment 内部
Segment 内部有着很多数据结构,如上图:
Inverted Index
Stored Fields
Document Values
Cache
最最重要的 Inverted Index
如下图:
Inverted Index 次要包括两部分:
一个有序的数据字典 Dictionary(包括单词 Term 和它消灭的频率)。
与单词 Term 对应的 Postings(即存在这个单词的文件)。
当我们搜索的时候,首先将搜索的内容分解,然后在字典里找到对应 Term,从而查找到与搜索相关的文件内容。
查询“the fury”
如下图:
自动补全(AutoCompletion-Prefix)
假如想要查找以字母“c”开头的字母,可以简约的通过二分查找(Binary Search)在 Inverted Index 表中找到例如“choice”、“coming”这样的词(Term)。
昂贵的查找
假如想要查找全部包含“our”字母的单词,那么系统会扫描整个 Inverted Index,这是格外昂贵的。
在此种情况下,假如想要做优化,那么我们面对的问题是如何生成合适的 Term。
问题的转化
如下图:
对于以上诸如此类的问题,我们可能会有几种可行的处理方案:
* suffix→xiffus *,假如我们想以后缀作为搜索条件,可以为 Term 做反向处理。
(60.6384, 6.5017)→ u4u8gyykk,对于 GEO 位相信息,可以将它转换为 GEO Hash。
123→{1-hundreds, 12-tens, 123},对于简约的数字,可以为它生成多重方式的 Term。
处理拼写错误
一个 Python 库为单词生成了一个包含错误拼写信息的树外外形机,处理拼写错误的问题。
Stored Field 字段查找
当我们想要查找包含某个特定标题内容的文件时,Inverted Index 就不能很好的处理这个问题,所以 Lucene 供应了另外一种数据结构 Stored Fields 来处理这个问题。
本质上,Stored Fields 是一个简约的键值对 key-value。默认情况下,ElasticSearch 会存储整个文件的 JSON source。
Document Values 为了排序,聚合
即便这样,我们发觉以上结构仍旧无法处理诸如:排序、聚合、facet,由于我们可能会要读取大量不需要的信息。
所以,另一种数据结构处理了此种问题:Document Values。这种结构本质上就是一个列式的存储,它高度优化了具有相同类型的数
文档评论(0)