我正在做一个新项目,我必须开发一个可以存储在文件数据库(例如 CouchDB)中的倒排索引。我正在使用 Ruby 1.8.7 进行编码。
这是倒排索引的格式:
{
"en": {
"#linux": {
"re": 144,
"patch": 142,
"1": 55,
"to": 53
},
"#something": {
"word": 20
}
},
"fr": {},
"es": {}
}
我想要一种使用 CouchDB 之类的方法,我可以通过如下一系列检查来创建条目:
- 如果第二个哈希键(即
#linux
)尚未创建,则创建它 patch
如果尚未创建第三个哈希键(即),则创建它并将其值设置为1
- 每次再次出现相同的单词
['en']['#linux']
或任何变量时,重复计数(最右边的值)并将其增加一。
我仅使用基本哈希就可以很好地解决问题,但是当我将脚本设置为通过大约 1TB 或更多的文本时,将这些放在内存中并不是很好。
选择的答案
选定的答案非常适合这个。唯一的区别是对语法进行了一些细微的更改,其工作方式如下:
@db.collection.update({"_id" => lang}, {"$inc" => {"#{tag}.#{word}" => 1}}, { :upsert => true })