Lucene:搜索时加载索引文件?

时间:2012-02-08 16:16:41

标签: lucene.net zend-search-lucene lucene

任何人都可以解释在搜索时如何在内存中加载索引文件吗?

整个文件(fnm,tis,fdt等)是一次加载还是以块状加载?

如何加载单个细分以及按哪种顺序?

如何加密Lucene索引?

1 个答案:

答案 0 :(得分:2)

拥有索引段的要点是你很少能将整个索引加载到内存中。

设计索引格式时要考虑的最重要的限制是磁盘搜索时间相对较长(在基板硬盘上,仍然是最广泛使用的)。一个好的估计是每个字节的传输时间大约是0.01到0.02μs,而磁头的平均寻道时间大约是5 ms!

因此,保存在内存中的部分通常只是字典,用于查找磁盘上的发布列表的起始块*。其他部分仅按需加载,然后从内存中清除,以便为其他搜索腾出空间。

至于加密,它取决于您是否需要始终对索引进行加密(即使在内存中),或者仅加密索引文件是否足够。至于后者,我认为加密文件系统就足够了。至于前者,由于不同的索引压缩技术已经到位,因此当然也是可能的。但是,我不认为它被广泛使用,因为全文引擎的首要要求是速度。

[*]实际上并不是那么简单,因为我们正在对字典执行二进制搜索,因此我们需要确保第一个结构中的所有条目具有相同的长度。因为字典中的普通单词显然不是这种情况,并且应用填充太昂贵了(想想某些化学物质的字长),我们实际上维护了两个级别的字典,第一个(需要适合内存并且是存储在.tii个文件中)保存第二个索引(.tis个文件)中术语起始位置的排序列表。然后,第二个索引是按递增顺序排列的所有项的串联数组,以及指向.frq文件中扇区的指针。第二个索引通常适合存储器并在开始时加载,但它可能是不可能的,例如对于二元索引。另请注意,Lucene默认情况下一段时间内不使用单个文件,而是使用所谓的复合文件(扩展名为.cfs)来减少打开文件的数量。