gpt4 book ai didi

ruby - 在 Ruby 中创建倒排索引哈希

转载 作者:数据小太阳 更新时间:2023-10-29 08:52:37 26 4
gpt4 key购买 nike

我在做一个新项目,我必须开发一个可以存储在文件数据库(例如 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 })

最佳答案

CouchDB 不会是您完成这项工作的最佳工具。特别是它不适合不增长文档(您的增量)的快速更新。每次更新后,它都会在磁盘上创建一个新版本的文档,因此您的数据库会非常庞大​​,磁盘会很忙。

我建议查看 MongoDB .它具有快速的就地更新、索引和更丰富的查询语言。示例:

db.collection.update({_id: 'en'},
{$inc: {'linux.re': 1}},
true);

这将找到 ID 为“en”的文档并递增其 ['linux']['re'] 字段。如果找不到文档,或者 ['linux'] 不存在,或者 ['linux']['re'] 不存在,它们将自动创建。这是该数据库中我最喜欢的功能之一。

关于ruby - 在 Ruby 中创建倒排索引哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9143864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com