ElasticSearch实战(三)-倒排索引算法

302 阅读1分钟

        Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型数据库的b-tree索引快在哪里?到底为什么快呢?

一、倒排索引原理

        笼统的来说,b-tree索引是为写入优化的索引结构。当我们不需要支持快速的更新的时候,可以用预先排序等方式换取更小的存储空间,更快的检索速度等好处,其代价就是更新慢。要进一步深入的化,还是要看一下Lucene的倒排索引是怎么构成的。

         这里有好几个概念。我们来看一个实际的例子,假设有如下的数据:

        这里每一行是一个document。每个document都有一个docid。那么给这些document建立的倒排索引就是:

        可以看到,倒排索引是per field的,每一个字段都有属于自己的倒排索引。18,20这些叫做 term,