ES倒排索引是实现构建高效全文搜索引擎的核心,下面我就全面来详解ES倒排索引@mikechen
什么是倒排索引?
倒排索引(Inverted Index)是一种用于加速文本检索的数据结构,广泛应用于搜索引擎、数据库系统和信息检索系统等领域。
倒排索引的作用
使用倒排索引的好处是,在索引建立后,查询时只需对倒排索引进行搜索,而不需要遍历整个对象集合。
如下图所示:
这种方式能够极大地减少搜索的时间复杂度,提高查询的效率。
什么是正排索引?
要了解倒排索引,你首先需要理解清楚什么是正排索引,然后再来理解倒排索引就容易了。
所谓正排索引很简单,就是和我们人脑的记忆更加贴合的一种数据结构。
正排索引,就是以文档对象的唯一 ID 作为索引,以文档内容作为记录。
如下图所示:
按照id为索引,根据id来查找文档,是一个很容易理解的正向过程。
举一个生活中的例子:
比如:记忆古诗,当别人问我们《静夜思》这首诗的时候,我们很容易就能够背出完整的诗句。
但是如果有人问我们哪一首诗里面包含有霜这个字的时候,我们就很难想到《静夜思》这首诗了,因为我们的大脑在记忆古诗的时候是建立了一个正排索引。
比如:输入静夜思,然后出现“窗前明月光,疑是地上霜,举头望明月,低头思故乡”,大脑记忆古诗的这个顺序,这就是正排索引。
倒排索引实现原理
在理解了正排索引后,这个时候再来理解倒排索引。
倒排索引,按照这个名字就很清楚,就是与正向刚好相反。
倒排索引就是当用户在搜索引擎搜索框中输入关键词的时候,搜索引擎就会把和关键词有关的页面展现给用户,而这个过程就叫做倒排索引。
倒排索引是将文档内容中的单词作为索引,将包含该词的文档 ID 作为记录。
如下图所示:
还是举例来说明:
有一个从古代流传至今的游戏,叫做《飞花令》,规则就是要能够说出含有“花”的诗句,谁能够说的多谁就获胜,这就是典型的倒排索引。
如下图所示:
通过分词,产生倒排索引表,然后正常查询,根据’词’来查询,直接去倒排索引表检索出来,然后去原数据表中查找出来。
再举一个例子:
手机查询,原始数据如下:
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面试题总结》