图解 ElasticSearch 原理,你可收好了!.docxVIP

图解 ElasticSearch 原理,你可收好了!.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档