ES 倒排索引?正排索引?存储结构?怎么用的?快在哪?
ES 倒排索引?正排索引?存储结构?怎么用的?快在哪?
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
Elasticsearch 的倒排索引和正排索引
Elasticsearch 是一个基于 Lucene 构建的开源搜索引擎,它广泛应用于全文搜索、日志分析等场景。Elasticsearch 中的索引机制是其高效搜索能力的关键所在,主要包括倒排索引和正排索引。
倒排索引(Inverted Index)
倒排索引是 Elasticsearch 中用于快速全文搜索的关键数据结构。它的工作原理是将文档中的内容分解成一系列的单词(或称为词项),然后为每个词项创建一个索引,指向包含该词项的所有文档。
存储结构
倒排索引主要由两个部分组成:
- 词典(Term Dictionary):存储所有词项,通常会对词项进行排序,以便快速查找。
- 倒排列表(Postings List):对于词典中的每个词项,都有一个对应的倒排列表,记录了包含该词项的所有文档的 ID,以及词项在每个文档中的位置信息等。
使用方式
当执行搜索查询时,Elasticsearch 会将查询字符串分解成词项,然后在词典中查找这些词项,获取对应的倒排列表,最后通过合并这些倒排列表来找到包含所有搜索词项的文档。
速度优势
倒排索引的速度优势在于:
- 高效的检索:由于词项是预先索引好的,因此可以快速定位到包含特定词项的文档。
- 空间压缩:通过词项的去重和压缩存储,减少了存储空间的需求。
- 排序和相关性打分:倒排索引可以快速进行相关性打分和结果排序,因为它保存了词项在文档中的位置信息。
正排索引(Forward Index)
正排索引是文档到词项的映射。在 Elasticsearch 中,正排索引通常用于存储文档的结构化数据,比如数字、日期等,以便进行精确值的过滤、排序和聚合操作。
存储结构
正排索引的存储结构通常是一个文档 ID 到字段值的映射表,每个文档 ID 对应一个或多个字段的值。
使用方式
当需要对特定字段进行过滤、排序或聚合时,Elasticsearch 会使用正排索引来快速访问这些字段的值。
速度优势
正排索引的速度优势在于:
- 快速的字段访问:正排索引允许直接访问文档的字段值,这对于排序和聚合操作尤其重要。
- 内存效率:正排索引通常存储在内存中,这样可以提供快速的数据访问。
总结
Elasticsearch 中的倒排索引和正排索引各自有不同的优势和使用场景。倒排索引主要用于全文搜索,而正排索引则用于结构化数据的过滤、排序和聚合。两者的结合使得 Elasticsearch 能够提供强大而灵活的搜索和分析能力。