【问题标题】:Are there any tag matching algorithm?有没有标签匹配算法?
【发布时间】:2012-07-23 15:44:08
【问题描述】:

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

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

【问题讨论】:

  • “倒排索引”很有用。 “而且大多数情况下,您将拥有一个单独的标签表,然后单个帖子可以链接多个标签(使用键)”是@abhinav 描述的广泛使用的方法。

标签: algorithm search data-structures tags


【解决方案1】:

过去我没有为此使用任何专门的 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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-08-06
        • 1970-01-01
        • 2017-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-16
        • 1970-01-01
        相关资源
        最近更新 更多