【问题标题】:Which Search / Tag system is better?哪个搜索/标签系统更好?
【发布时间】:2011-01-04 16:58:09
【问题描述】:

我正在开发一个拥有用户和用户生成的文章、画廊和视频的网站。我正在尝试制作一个标记系统并搜索它们。

起初我想在 tbl_articles、tbl_galleries 和 tbl_videos 中我会有一个标题、描述和一个标签字段。然后为每个运行如下查询:

select * from tbl_articles where match(title, description, tags)
  against ('$search' in boolean mode) ORDER BY match(title, description, tags)
  against ('$search' in boolean mode) DESC, views desc LIMIT 0, 3

tbl_galleries 和 tbl_videos 的查询相同。对于用户,只需比较用户名。然后在结果页面上显示三个,并带有一个“更多”按钮(facebook 样式)。

在查看文章、图库或视频时,也会有相关内容的链接,因此我考虑使用相同的查询,仅将 LIMIT 设置为“1,3” - 以避免显示自身。

Q1 - 这个系统怎么样?

我对系统很满意,直到找到this

他们在其中拥有

  • 一个“标签”表,其中包含两个 列一个主 ID 和一个唯一的 已编入索引的 tag_name。
  • 他们拥有的“类型”表 另一个主 ID 和唯一 索引“类型”(类别)(我认为 我可以用它 用户/视频/文章/图库)
  • 一个“搜索”表,其中包含 带有外国ID的文章的网址 来自“标签”和“类型”。 (我想 而不是一个完整的网址,我可以 存储相关的外国ID,以便 我可以生成网址,例如 article.php?id=....)

Q2 - 这个系统似乎效率更高...虽然我将如何搜索标题或描述?

Q3 - 另一个不好的事情是对于每个页面视图我都必须加入标签。所以它可能不会那么有效。

Q4 - 我的系统也只搜索布尔值,使用“like”查询会更好吗?

Q5 - 我将用户限制为 4 个标签,但我鼓励使用单个单词(stackoverflow 风格)...我意识到虽然在我的系统中搜索“火车站”不匹配像“火车站”这样的标签我该如何解决这个问题?

这么多问题......抱歉,它太长了。谢谢你。

【问题讨论】:

    标签: php mysql search tags


    【解决方案1】:

    Q1 - 最好使用三个单独的文章、标签表以及与文章和标签相关的链接表。您也可以使用两个文章表和一个articles_tags 表来执行此操作。 article_tags 表将包含一个 articleID 字段和标签本身作为复合键。两个或三个表都可以很容易地找到哪些文章具有给定标签以及哪些标签分配给给定文章。

    Q2 - 标题和描述搜索可以使用带有百分比的“like”或正则表达式或全文搜索来完成。

    Q3 - 不要担心将标签表与其他表连接起来。套用 Knuth 的话说,首先构建它,然后找到瓶颈。 MySQL 非常擅长它的工作。一遍又一遍地将这些表连接在一起不会有什么坏处。

    Q4 - 这取决于您想从结果中得到什么。通常你想要实际的数据,然后你可以测试返回的行数来告诉你它是真还是假。

    Q5 - 同样,在将查询传递给数据库之前,您必须在 PHP 端使用“like”语法和一些创造性的正则表达式。

    祝你好运!

    【讨论】:

    • 感谢您的回答。还有一个问题......你建议我把标题和描述放在哪里 - 在他们的原始表格中?
    • 看来他们正在使用 tag_target_name 和 tag_target_url 来构建指向被标记内容的链接。您可以将您的标题和描述放在他们的位置,但更好的解决方案是将所有这些信息放在一个单独的“文章”表中,并将文章表中行的 id 存储到 tag_targets 表中。这样一来,您就不会为每篇文章的每个标签重复标题和描述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多