4

我的系统类似于stackoverflow。基本上,一个帖子可以有多个标签,并且有一个搜索功能可以找到与查询标签匹配的帖子(所有标签必须匹配)

我想知道是否有任何算法/数据结构可以有效地解决帖子标记/搜索问题?就速度(时间复杂度)而言,哪一个效率最高?

4

3 回答 3

2

在过去,我没有为此使用任何专门的 DS。事实上,如果你想用 RDBMS 来做这件事,请阅读Wordpress 如何使用分类法做这件事的详细信息。大多数情况下,您将拥有一个单独的标签表,然后各个帖子可以链接多个标签(使用键)。

另一种流行的方法是将您的问题视为一个刻面问题。您必须使用全文索引框架并在此基础上开发分面浏览。这是来自 Lucene/Solr 的创建者的一篇出色的文章,它解释了这种情况。有了分面浏览,您将能够显示 stackoverflow 所做的一些事情:

algorithm × 21165
search × 8863
data-structures × 5867
tags × 2886
stackoverflow × 721
于 2012-07-25T08:52:55.897 回答
0

存储此类数据以进行搜索的最省时的方法通常是在倒排索引中。这也恰好是最常见的搜索引擎/信息检索系统所围绕的内容。

对于这个的实际实现,我建议你看看Apache Lucene

于 2012-07-25T08:52:36.607 回答
0

对于这个问题,答案是肯定的。我正在开发一个学生内部网作为我的作业项目,实现的算法因数据库设计而异。

在我的例子中,有一个算法用大约 140 行编码。

tag     (tagID*, tagName)
tagMap  (tagSetID*, tagID*)
tagSet  (tagSetID*)
announce    (announceID*, tagSetID, title, content)

如上所述,我自己开发了多个标签匹配算法。以防万一认为我的算法不够高效,现在我意外地了解了@joel 和@abhinav 提到的倒排索引。

于 2021-04-15T10:47:25.673 回答