ES倒排索引详解(原理作用及数据结构)

ES倒排索引详解(原理作用及数据结构)-mikechen

ES倒排索引是实现构建高效全文搜索引擎的核心,下面我就全面来详解ES倒排索引@mikechen

什么是倒排索引?

倒排索引(Inverted Index)是一种用于加速文本检索的数据结构,广泛应用于搜索引擎、数据库系统和信息检索系统等领域。

 

倒排索引的作用

使用倒排索引的好处是,在索引建立后,查询时只需对倒排索引进行搜索,而不需要遍历整个对象集合。

如下图所示:

ES倒排索引详解(原理作用及数据结构)-mikechen

这种方式能够极大地减少搜索的时间复杂度,提高查询的效率。

 

什么是正排索引?

要了解倒排索引,你首先需要理解清楚什么是正排索引,然后再来理解倒排索引就容易了。

所谓正排索引很简单,就是和我们人脑的记忆更加贴合的一种数据结构。

正排索引,就是以文档对象的唯一 ID 作为索引,以文档内容作为记录。

如下图所示:

ES倒排索引详解(原理作用及数据结构)-mikechen

按照id为索引,根据id来查找文档,是一个很容易理解的正向过程。

举一个生活中的例子:

比如:记忆古诗,当别人问我们《静夜思》这首诗的时候,我们很容易就能够背出完整的诗句。

但是如果有人问我们哪一首诗里面包含有霜这个字的时候,我们就很难想到《静夜思》这首诗了,因为我们的大脑在记忆古诗的时候是建立了一个正排索引。

比如:输入静夜思,然后出现“窗前明月光,疑是地上霜,举头望明月,低头思故乡”,大脑记忆古诗的这个顺序,这就是正排索引。

 

倒排索引实现原理

在理解了正排索引后,这个时候再来理解倒排索引。

倒排索引,按照这个名字就很清楚,就是与正向刚好相反。

倒排索引就是当用户在搜索引擎搜索框中输入关键词的时候,搜索引擎就会把和关键词有关的页面展现给用户,而这个过程就叫做倒排索引。

倒排索引是将文档内容中的单词作为索引,将包含该词的文档 ID 作为记录。

如下图所示:

ES倒排索引详解(原理作用及数据结构)-mikechen

还是举例来说明:

有一个从古代流传至今的游戏,叫做《飞花令》,规则就是要能够说出含有“花”的诗句,谁能够说的多谁就获胜,这就是典型的倒排索引。

如下图所示:

ES倒排索引详解(原理作用及数据结构)-mikechen

通过分词,产生倒排索引表,然后正常查询,根据’词’来查询,直接去倒排索引表检索出来,然后去原数据表中查找出来。

再举一个例子:

手机查询,原始数据如下:

doc_id

name

desc

匹配数(在分词表中出现)

1

华为手机

中国第一品牌

2

2

华为荣耀手机

年轻人用的手机

3

3

荣耀手机

…..

2

4

青春版手机

…..

1

5

P40手机

…..

1

然后,通过分词产生倒排索引表。

如下所示:

分词

doc_ids

华为

[1,2]

手机

[1,2,3,4,5]

荣耀

[2,3]

青春版

[4]

P40

[5]

倒排索引进行分组,根据’华为’、’荣耀’、’手机’分组,这就是倒排索引。

 

ES倒排索引应用

Elasticsearch(ES)的倒排索引在各种应用场景中都具有广泛的用途,主要是因为它能够高效地处理全文搜索和复杂查询。

以下是一些ES倒排索引的应用场景:

1.全文搜索引擎

ES最典型的用途是构建全文搜索引擎,它能够处理大量文本数据,使用户能够快速地执行文本搜索和检索,例如搜索引擎、商品搜索、文档搜索等。

 

2.日志分析

ES可用于实时分析和搜索日志数据,管理员和开发人员可以使用ES来监控应用程序日志、系统日志或访问日志。

 

3.监控和度量

ES可以存储和检索时间序列数据,例如服务器性能指标、传感器数据、网络流量等,这使得ES成为监控和度量系统的强大工具。

例如:用于应用性能管理APM监控系统

 

4.推荐系统

ES可以用于构建个性化推荐系统,通过存储用户行为数据并使用倒排索引,系统可以快速找到与用户兴趣相关的内容或产品,并提供个性化推荐。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法