在SQL中,索引通常是某种平衡树(指向真实表行的有序节点,以便在O(log n)
中进行搜索)。通过这样的树树实际上是
现在,Lucene使用带有术语频率的倒置索引:它为每个术语存储在哪些文档中出现的频率。这很容易理解。但这并没有解释如何在这样的索引上实现搜索。
分析搜索字符串并以相同的方式拆分为术语,然后"搜索索引"这些条款可以找到包含它们的文件 - 但是如何? Lucene索引本身是否也被排序并且以某种方式组织树状以使O(log n)
成为可能?或者在搜索时间上走Lucene索引实际上是线性的,所以O(n)
?
答案 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,有限状态机等等。只要在搜索查询(“?”或“*”)时使用通配符,就会自动在索引中导致或多或少的深度遍历。