Lucene如何组织并遍历倒排索引?

时间:2016-01-15 18:33:05

标签: search indexing lucene

在SQL中,索引通常是某种平衡树(指向真实表行的有序节点,以便在O(log n)中进行搜索)。通过这样的树树实际上

现在,Lucene使用带有术语频率的倒置索引:它为每个术语存储在哪些文档中出现的频率。这很容易理解。但这并没有解释如何在这样的索引上实现搜索

分析搜索字符串并以相同的方式拆分为术语,然后"搜索索引"这些条款可以找到包含它们的文件 - 但是如何? Lucene索引本身是否也被排序并且以某种方式组织树状以使O(log n)成为可能?或者在搜索时间上走Lucene索引实际上是线性的,所以O(n)

1 个答案:

答案 0 :(得分:0)

对此没有简单的答案。首先,因为内部格式从发布到发布都有所改进,第二,因为随着Lucene 4的出现,引入了可配置的编解码器,作为逻辑格式和实际物理格式之间的抽象。

索引由分片和副本组成,每个分片和副本本身都是Lucene索引。然后,Lucene索引由多个段组成,而每个段再次是Lucene索引。段是只读的,由多个伪像组成,可以保存在文件系统或RAM中。

来自Adrien Grand的

What's in a Lucene index是关于Lucene指数组织的精彩演讲。来自Michael McCandless的这个blog article和来自Elastic的这个blog article是关于Lucene 4引入的编解码器。

因此,查询Lucene索引实际上会导致使用特定编解码器并行查询多个段。编解码器可以表示文件系统或RAM中的结构,通常针对特定需要进行优化/压缩。内部格式可以是树,Hashmap,有限状态机等等。只要在搜索查询(“?”或“*”)时使用通配符,就会自动在索引中导致或多或少的深度遍历。