存储倒排索引

6 投票
6 回答
4034 浏览
提问于 2025-04-16 03:59

我正在做一个信息检索的项目。 我用Hadoop和Python做了一个完整的倒排索引。 Hadoop输出的索引是以(单词,文档列表)这样的形式写到文件里的。 为了快速访问这些数据,我用上面的文件创建了一个字典(哈希表)。 我现在的问题是,如何把这样的索引存储到磁盘上,同时还能保持快速访问的速度。 目前我用Python的pickle模块来存储字典,并从中加载数据,但这样会一次性把整个索引都加载到内存中(或者是这样吗?)。 请给我一些高效的存储和搜索索引的方法。

我的字典结构如下(使用嵌套字典):

{单词 : {文档1:[位置], 文档2:[位置], ....}}

这样我就可以通过 字典[单词].keys() 来获取包含某个单词的文档,依此类推。

6 个回答

0

你可以像这样把它存储在一个字符串里:

<entry1>,<entry2>,<entry3>,...,<entryN>

如果<entry*>里有','这个字符,建议用其他分隔符,比如'\t'。这样存储的大小比用类似的序列化字符串要小。

如果你想加载它,只需这样做:

L = s.split(delimiter)
1

我会使用Lucene。为什么要重新发明轮子呢?

5

shelve

目前我在用Python的pickle模块来存储字典,并从中加载数据,但它会一次性把整个索引都加载到内存中(或者是这样吗?)

是的,它确实会把所有内容都加载进来。

这有问题吗?如果没有实际问题,那就继续这样用吧。

如果有问题,那你遇到的是什么问题呢?太慢了?太快了?颜色太多了?占用内存太多了?你到底遇到了什么问题?

撰写回答