Java 如何将反向文档索引存储在磁盘上?

Java 如何将反向文档索引存储在磁盘上?,java,data-structures,inverted-index,Java,Data Structures,Inverted Index,我知道stackoverflow和google一次又一次地问这个问题,但我发现所有的答案都不能让我满意。大多数解决方案都假设整个索引可以放在内存中,然后我们可以通过Java序列化将其存储到磁盘。当需要索引时,我们必须将整个索引加载到内存中。解决方案如下: , . 但正如我们所知,这种假设并不总是正确的,所以当反转的文档索引不适合内存时,我应该如何将其存储到磁盘上 如果您能用Java给我提供解决方案,我将不胜感激。我会尝试使用这种支持树和散列集合的方法,唯一的要求是每个键或条目都适合内存 如果您有

我知道stackoverflow和google一次又一次地问这个问题,但我发现所有的答案都不能让我满意。大多数解决方案都假设整个索引可以放在内存中,然后我们可以通过Java序列化将其存储到磁盘。当需要索引时,我们必须将整个索引加载到内存中。解决方案如下: , . 但正如我们所知,这种假设并不总是正确的,所以当反转的文档索引不适合内存时,我应该如何将其存储到磁盘上

如果您能用Java给我提供解决方案,我将不胜感激。

我会尝试使用这种支持树和散列集合的方法,唯一的要求是每个键或条目都适合内存


如果您有超大的条目,我建议将每个条目存储为文件,这些文件可以通过内存映射提取部分数据。在查找表中,可以存储文件名的键。(或将文件名作为密钥)

几年后的更新

不再支持JDBM3。 是它的替代品。
它可以存储满足您需求的数据(内存映射等)。

您的结构是如何实现的?索引中的术语是否也太大而无法存储,还是仅存储文档列表?您是希望将内存使用率保持在接近零的水平,还是希望采用一种在内存中保留“频繁”项的结构来减少磁盘访问?所有这些都会影响您存储和访问索引的方式。反向索引需要支持每个键的多个值。这在MapDB中几乎是不可能的,因为它在文档中指出:“Multimap是一个将多个值与一个键关联的映射。[…]它可以写成
Map
,但这在MapDB中不起作用,我们需要键和值是不可变的,列表不是不可变的。”