Elasticsearch 中为什么选择倒排索引而不选择 B 树索引
全文索引为何不使用 B+ 树进行存储
在关系型数据库中,B+ 树索引被广泛用于提升查询效率。然而 Elasticsearch 使用倒排索引而非 B+ 树进行全文搜索。倒排索引通过关键词与文档关联,实现高效检索。
使用 B+ 树作为全文索引存在以下两个问题:首先,当索引值过大时,节点存储的数据量会减少,导致树更深,搜索所需 IO 次数增加。其次,全文搜索通常不遵循最左匹配原则,这可能导致 B+ 树索引失效。
全文检索与正排、倒排索引
在全文检索中,倒排索引用于存储关键字与文档的对应关系。它以关键词作为索引关键字,记录相关文档的 ID、词频与位置信息。相反,正排索引使用文档 ID 作为关键字,记录文档中词的出现情况。
正排索引适合检索文档,但不适用于聚合运算。倒排索引则是全文搜索的首选,但不适用于聚合查询。因此,Elasticsearch 中聚合运算使用正排索引。
倒排索引的存储方式与压缩算法
倒排索引数据通过压缩算法进行存储优化。FOR 算法简化存储,但对特定文档 ID 有要求。当文档 ID 连续时,可采用更高效压缩方法。RBM 算法利用位图实现高效存储,适用于数据差异较大的情况。
存储结构:字典树与 FST
字典树解决字符串前缀共享问题,但不处理后缀复用。FST 是字典树的改进,不仅共享前缀还复用相同后缀,提高存储效率。Elasticsearch 使用 FST 存储倒排索引,优化搜索性能。
总结:Elasticsearch 采用倒排索引,利用压缩算法与高效存储结构,实现全文搜索的性能优化。与 B+ 树索引相比,倒排索引更适合处理大文本与全文检索需求。
继续阅读:Elasticsearch 中为什么选择倒排索引而不选择 B 树索引在关系型数据库中,B+ 树索引被广泛用于提升查询效率。然而 Elasticsearch 使用倒排索引而非 B+ 树进行全文搜索。倒排索引通过关键词与文档关联,实现高效检索。
使用 B+ 树作为全文索引存在以下两个问题:首先,当索引值过大时,节点存储的数据量会减少,导致树更深,搜索所需 IO 次数增加。其次,全文搜索通常不遵循最左匹配原则,这可能导致 B+ 树索引失效。
全文检索与正排、倒排索引
在全文检索中,倒排索引用于存储关键字与文档的对应关系。它以关键词作为索引关键字,记录相关文档的 ID、词频与位置信息。相反,正排索引使用文档 ID 作为关键字,记录文档中词的出现情况。
正排索引适合检索文档,但不适用于聚合运算。倒排索引则是全文搜索的首选,但不适用于聚合查询。因此,Elasticsearch 中聚合运算使用正排索引。
倒排索引的存储方式与压缩算法
倒排索引数据通过压缩算法进行存储优化。FOR 算法简化存储,但对特定文档 ID 有要求。当文档 ID 连续时,可采用更高效压缩方法。RBM 算法利用位图实现高效存储,适用于数据差异较大的情况。
存储结构:字典树与 FST
字典树解决字符串前缀共享问题,但不处理后缀复用。FST 是字典树的改进,不仅共享前缀还复用相同后缀,提高存储效率。Elasticsearch 使用 FST 存储倒排索引,优化搜索性能。
总结:Elasticsearch 采用倒排索引,利用压缩算法与高效存储结构,实现全文搜索的性能优化。与 B+ 树索引相比,倒排索引更适合处理大文本与全文检索需求。