4

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

1:一般情况下,skip list可能用在内存中,倒排索引存储在磁盘中。那么 lucene 在索引上搜索时是如何使用它的呢?只是在磁盘上扫描或将其加载到内存中?

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

如果我错了,请纠正我。

4

2 回答 2

3

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

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

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

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

于 2012-12-03T14:04:29.843 回答
1

请参阅为了加速发布列表跳过,Lucene 使用了跳过列表

于 2016-07-20T10:00:20.160 回答