我的系统类似于stackoverflow。基本上,一个帖子可以有多个标签,并且有一个搜索功能可以找到与查询标签匹配的帖子(所有标签必须匹配)
我想知道是否有任何算法/数据结构可以有效地解决帖子标记/搜索问题?就速度(时间复杂度)而言,哪一个效率最高?
我的系统类似于stackoverflow。基本上,一个帖子可以有多个标签,并且有一个搜索功能可以找到与查询标签匹配的帖子(所有标签必须匹配)
我想知道是否有任何算法/数据结构可以有效地解决帖子标记/搜索问题?就速度(时间复杂度)而言,哪一个效率最高?
在过去,我没有为此使用任何专门的 DS。事实上,如果你想用 RDBMS 来做这件事,请阅读Wordpress 如何使用分类法做这件事的详细信息。大多数情况下,您将拥有一个单独的标签表,然后各个帖子可以链接多个标签(使用键)。
另一种流行的方法是将您的问题视为一个刻面问题。您必须使用全文索引框架并在此基础上开发分面浏览。这是来自 Lucene/Solr 的创建者的一篇出色的文章,它解释了这种情况。有了分面浏览,您将能够显示 stackoverflow 所做的一些事情:
algorithm × 21165
search × 8863
data-structures × 5867
tags × 2886
stackoverflow × 721
存储此类数据以进行搜索的最省时的方法通常是在倒排索引中。这也恰好是最常见的搜索引擎/信息检索系统所围绕的内容。
对于这个的实际实现,我建议你看看Apache Lucene。
对于这个问题,答案是肯定的。我正在开发一个学生内部网作为我的作业项目,实现的算法因数据库设计而异。
在我的例子中,有一个算法用大约 140 行编码。
tag (tagID*, tagName)
tagMap (tagSetID*, tagID*)
tagSet (tagSetID*)
announce (announceID*, tagSetID, title, content)
如上所述,我自己开发了多个标签匹配算法。以防万一认为我的算法不够高效,现在我意外地了解了@joel 和@abhinav 提到的倒排索引。