有没有标签匹配算法?

时间:2012-07-25 08:42:38

标签: algorithm search data-structures tags

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

我想知道是否有任何算法/数据结构可以有效地解决标记/搜索的问题?哪一个在速度方面最有效(时间复杂度)?

3 个答案:

答案 0 :(得分:2)

过去我没有使用任何专门的DS。事实上,如果您想使用RDBMS执行此操作,请仔细阅读how Wordpress do this using taxanomies的详细信息。大多数情况下,你会有一个单独的标签表,然后个别帖子可以链接多个标签(使用键)。

另一种流行的方法是将您的问题视为一个分面问题。您必须使用全文索引框架并在此基础上开发您的分面浏览。 Here is an excellent post from the creator of Lucene/Solr解释了这种情况。通过分层浏览,您将能够显示stackoverflow的功能:

algorithm × 21165
search × 8863
data-structures × 5867
tags × 2886
stackoverflow × 721

答案 1 :(得分:0)

存储此类数据进行搜索的最省时的方法通常是Inverted index。这也恰好是最常见的搜索引擎/信息检索系统的基础。

为了实际实现这一点,我建议您查看Apache Lucene

答案 2 :(得分:0)

对于这个问题,答案是肯定的。 我正在开发一个学生内联网作为我的作业项目,实现的算法取决于数据库设计。我确实为标签创建了 3 个单独的表,为类似于帖子的公告创建了 1 个表。 并有一个关于它的数据库设计的问题:How appropriate is one column table

就我而言,有一个大约 140 行代码的算法。

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

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