【问题标题】:Lucene: Loading Index files while searching?Lucene:搜索时加载索引文件?
【发布时间】:2012-02-08 16:16:41
【问题描述】:

谁能解释一下搜索时索引文件是如何加载到内存中的?

整个文件(fnm、tis、fdt 等)是一次加载还是分块加载?

如何加载各个段以及按什么顺序?

如何加密Lucene索引?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您的回复。您能否提供一些链接以获取更多信息?
    猜你喜欢
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2017-09-10
    相关资源
    最近更新 更多