写点什么

Elasticsearch 简介以及索引原理

  • 2023-03-25
    浙江
  • 本文字数:1609 字

    阅读完需:约 5 分钟

搜索是现代软件必备的一项基础功能,而 Elasticsearch 就是一款功能强大的开源分布式搜索与数据分析引擎。今天就给大家介绍下它的应用场景和索引实现的原理~


一、Elasticsearch 是什么? 

Elasticsearch 是一个实时的分布式搜索分析引擎,它可以使你以前所未有的速度和规模去探索你的数据。

它被用来做全文检索、结构化搜索和分析,以及这三个功能的组合,比如:

  • Wikipedia 使用 Elasticsearch 提供高亮片段的全文搜索,并且遵循 search-as-you-type 和 did-you-mean 的原则。

  • 卫报使用 Elasticsearch 将有关新文章的实时反馈提供给公众。

  • Stack Overflow 将定位查询整合到全文检索中去,并使用 more-like-this 接口去查找相关的问题和回答。

  • GitHub 使用 Elasticsearch 对 1300 亿行代码进行查询。  


二、ES 的生态圈   

ES 生态圈主要包含这几个好基友:



 三、ES 的特点和优势

  • 分布式实时文件存储,可将每一个字段存入索引,使其可以被检索到。

  • 实时分析的分布式搜索引擎,将索引拆分成多个分片,集群中的数据节点可以承载一个或多个分片,并且协调和处理各种操作,负载再平衡和路由大多数情况下自动完成。

  • 可以扩张到上百台服务器上,处理 PB 级别的结构化和非结构化数据,也可以运行在单台 PC 上。

  • 支持插件机制,分词插件、同步插件、Hadoop 插件和可视化插件。 

  

四、asticsearch 全文检索的原理是什么?

这里先解释什么是正排索引,什么是倒排索引。

正排索引好比一本书的目录,我们通过书本的目录,找到相关内容的页码,再去查询该页码下,我们想要查找的内容。

倒排索引主要是为了解决“你想知道的某个关键词在书中的哪一页出现过”这类问题。倒排索引需要把文本拆分成一个一个单词,并且标记这个单词在文本中的位置,当我们想查找与某个关键词相关的文本内容时,我们通过倒排索引查找,就可以很轻易找到我们想要查找的内容。  


五、Lucene 构建 index 原理

新增文档可以分为四个步骤:

  1. 新增文档:doc 经过 Analyzcr 分词器分词之后,我们可以得到词(term)和文档 ID 的对应列表。

  2. 对这些词集进行一次排序:然后合并相同的词并统计出现频率,以及记录出现的文档 ID,得到倒排索引(与正排相反)。由于不是通过一条数据记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。

  3. 生成词典文件:不仅保存有每个关键词,还保留了指向频率文件和位置文件的指针,通过指针可以找到该关键字的频率信息和位置信息。

  4. 进行索引:拿到单词先对词典进行二元查找,找到该词,通过指向频率文件的指针读出所有文章号,然后返回结果。词典通常非常小,整个过程是毫秒级的。


六、Lucene 构建 index 原理—segment 段

分片由多个 segment 段组成,每个段都是一个独立的倒排索引集,且具有不变性。

Segment 段不可变=>则意味着它不需要锁,也不需要更新,但也正是由于它的不可变性导致增删改都需要新建段文件。

新增文档首先写入文件系统缓存(高效),默认每秒 refresh 成新增段(不落盘),变成可搜索的状态。

删除的文档在旧段中也不会被删除,只是放在.dcl 文件中在查询时被过滤掉了。

更新文档时,旧版本的文档在.del 文件中被标记为删除,新版本的文档被索引到一个新段。旧版本的文档依然能匹配查询,但是会在结果中被过滤掉。 



七、Lucene 构建 index 原理—持久化变更

  1. 新的文档被添加到内存缓冲区并且被追加到了 translog 事务日志。

  2. 刷新(refresh)完成后,缓存被清空但是事务日志不会。

  3. 更多的文档被添加到内存缓冲区和追加到事务日志。

  4. 在刷新(flush)之后,段被全量提交,并且事务日志被清空。 


八、Lucene 构建 index 原理—合并段

自动 refresh 每秒会创建一个新段,这会导致短时间内的段数量暴增。每个搜索请求都必须轮流检查每个段,所以段越多,搜索也就越慢,Elasticsearch 会在后台进行段合并来解决这个问题,主动将这些零散的 segment 做数据归并,尽量让索引内只保有少量的、每个都比较大的 scgment 文件。


本期内容就到这里了,如果喜欢就点个关注吧,微信公众号搜索“数 新 网 络 科 技 号”可查看更多精彩内容~


发布于: 刚刚阅读数: 3
用户头像

云数据智能操作系统领导者 2022-12-05 加入

浙江数新网络有限公司是一家拥抱开源,专注于云数据平台的大数据服务商,致力于结合全球云数仓先进理念,打造适合中国落地路径的云数仓体系。

评论

发布
暂无评论
Elasticsearch简介以及索引原理_数新网络官方账号_InfoQ写作社区