存储倒排索引
我正在做一个信息检索的项目。 我用Hadoop和Python做了一个完整的倒排索引。 Hadoop输出的索引是以(单词,文档列表)这样的形式写到文件里的。 为了快速访问这些数据,我用上面的文件创建了一个字典(哈希表)。 我现在的问题是,如何把这样的索引存储到磁盘上,同时还能保持快速访问的速度。 目前我用Python的pickle模块来存储字典,并从中加载数据,但这样会一次性把整个索引都加载到内存中(或者是这样吗?)。 请给我一些高效的存储和搜索索引的方法。
我的字典结构如下(使用嵌套字典):
{单词 : {文档1:[位置], 文档2:[位置], ....}}
这样我就可以通过 字典[单词].keys() 来获取包含某个单词的文档,依此类推。
6 个回答
0
你可以像这样把它存储在一个字符串里:
<entry1>,<entry2>,<entry3>,...,<entryN>
如果<entry*>
里有','这个字符,建议用其他分隔符,比如'\t'。这样存储的大小比用类似的序列化字符串要小。
如果你想加载它,只需这样做:
L = s.split(delimiter)
1
我会使用Lucene。为什么要重新发明轮子呢?
5
目前我在用Python的pickle模块来存储字典,并从中加载数据,但它会一次性把整个索引都加载到内存中(或者是这样吗?)
是的,它确实会把所有内容都加载进来。
这有问题吗?如果没有实际问题,那就继续这样用吧。
如果有问题,那你遇到的是什么问题呢?太慢了?太快了?颜色太多了?占用内存太多了?你到底遇到了什么问题?