我正在寻找一种类似于以下内容的高效数据结构来存储数据。
ID标签Order1 Order2 -------------------------- 1 1,2 1 1 2 2,5 2 3 3 1,7 4 7 4 6 3 0
我需要能够以这样的方式来查询这个结构,它会给我含标签表达式中的所有ID的列表-支持AND
和OR
和NOT
操作。例如。(((1或2)而不是7)
我还需要能够指定结果的顺序(Order1或Order2),并且能够指定带有可选偏移量的最大返回行数。获取前30-100个结果的性能至关重要。
最后,我需要一种便宜的方法来查找“标签关系”,例如,我想知道哪些标签与标签(1或2)“相关”以及以什么频率“关联”。表示哪些标签与1 OR 2 ...出现在同一集合中,并按频率排序。
关于哪种数据结构(或结构集)对于此类工作会非常有效的任何想法?
(我想以此为概念证明来重新设计SE系列网站的标记页面)
1
只是一个评论(也许微不足道)。您为什么不依赖关系数据库管理系统?您可以定义带有<id,tag>对的表,并在标签列上添加索引。然后,您可以使用标准的SQL查询提取数据。RDBMS将有效地执行查询优化和输出排序的“肮脏”工作。
—
Marzio De Biasi
@很抱歉,表达式在大规模情况下效率极低,自连接成为噩梦般的查询。
—
山姆·萨弗隆
@Sam:好的。您的任务很普通,因此我认为一个好的RDBMS(带有数据挖掘工具)可以胜任。我请一位数据结构专家发言。:-)
—
Marzio De Biasi
我相信,允许AND,OR,NOT的所有组合将使创建不列出所有项目的数据结构变得困难(也许可以将其限制为3-CNF?)。如果不存在这样的限制,则可能只浏览记录(以指定的顺序),直到找到30-100个符合标签要求的记录。尽管总的来说,我同意Vor的建议,即使用数据库为您完成繁重的工作。
—
2011年
不是专家,但是我认为,如果您对询问标签的方式不加限制,那将很困难。将它们限制为CNF(如bbejot所建议)是一种方法,另一种方法是将查询可以询问的不同标签的数量限制为少量(例如6)。
—
卡夫