lucene.net - Lucene:搜索时加载索引文件?

标签 lucene.net zend-search-lucene lucene

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

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

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

如何加密Lucene索引?

最佳答案

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

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

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

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

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

关于lucene.net - Lucene:搜索时加载索引文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9197190/

相关文章:

java - 如何对lucene的结果进行分组?

php - Zend lucene 和 MySql 数据库

search - Lucene中同一存储位置上的多个索引器

search - Solr 中的多个查询

zend-search-lucene - Zend Lucene 无法通过特殊字符进行所有搜索

lucene - Azure 搜索中的模糊搜索和邻近搜索

Lucene.Net - 返回所有文档

c# - 卢塞恩 : very slow NRT performance

c# - 如何在 Lucene.Net 中实现正确的模糊搜索?

php - 创建和更新 Zend_Search_Lucene 索引