Elasticsearch简介以及索引原理

本文介绍了Elasticsearch的应用场景,解析其分布式搜索与数据分析的强大能力。深入探讨了全文检索原理及Lucene构建索引的过程,包括正排索引、倒排索引、段管理等关键技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 搜索是现代软件必备的一项基础功能,而 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文件。

以上就是本期的全部内容了,下期将会带大家了解Elasticsearch的集群架构原理,敬请期待!

07-21 70
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值