lucene如何在倒排索引中使用跳过列表?

hal*_*ack 6 lucene inverted-index skip-lists

在一些博客和lucene网站中,我知道lucene在倒排索引中使用数据结构“跳过列表”。但我对此有一些困惑。

1:一般情况下,跳过列表可能会在内存中使用,而倒排索引则存储在磁盘中。那么lucene在索引搜索时如何使用它呢?只是将其扫描到磁盘上还是将其加载到内存中?

2:skip list的插入操作符经常使用random(0,1)来决定是否插入到下一级,但是在lucene的介绍中,似乎每一项都是固定的间隔,那么lucene如何创建不同或不不同的“skip list”呢?

如果我错了,请纠正我。

Bar*_*cki 4

Lucene 以几种不同的方式使用内存,即使在创建 IndexReader 用于搜索和排序(字段缓存)等操作时索引仍保留在磁盘上:

http://blog.mikemccandless.com/2010/07/lucenes-ram-usage-for-searching.html

基本上,这些二进制文件被复制到 RAM 中,以便更快地扫描并减少 I/O。您可以在上面的链接中得到提示,使用某些参数进行搜索如何强制 Lucene“在搜索中跳过术语”,因此可以在何处使用该数据结构。

Lucene 是开源的,因此您可以亲自查看 Java 或 Lucene.NET 中用于 C# 实现的代码。