Php 哪种搜索/标记系统更好?

Php 哪种搜索/标记系统更好?,php,mysql,search,tags,Php,Mysql,Search,Tags,我在一个网站上工作,有用户和用户生成的文章,画廊和视频的。我正在尝试建立一个标签系统,并对它们进行搜索 起初,我想在tbl_文章、tbl_画廊和tbl_视频中,我会有一个标题、描述和标签字段。然后对每个对象运行如下查询: select * from tbl_articles where match(title, description, tags) against ('$search' in boolean mode) ORDER BY match(title, description, t

我在一个网站上工作,有用户和用户生成的文章,画廊和视频的。我正在尝试建立一个标签系统,并对它们进行搜索

起初,我想在tbl_文章、tbl_画廊和tbl_视频中,我会有一个标题、描述和标签字段。然后对每个对象运行如下查询:

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_图库和tbl_视频进行相同的查询。对于用户,只需比较用户名。然后用“更多”按钮(facebook风格)在结果页面上显示其中三个

当观看一篇文章、画廊或视频时,也会有相关内容的链接,因此我考虑只使用限制设置为“1,3”的相同查询,以避免显示自己

Q1-这个系统怎么样

我对这个系统很满意,直到我发现

他们在其中

  • 包含两个标签的“标签”表 列包含一个主id和一个唯一的 索引标记名称
  • 一个“类型”表,它们具有 另一个主id和唯一的 索引的“类型”(类别)(我想 我可以用它来 用户/视频/文章/图库)
  • 包含以下内容的“搜索”表: 具有外部id的文章的url 来自“标记”和“类型”。(我想 而不是一个完整的网址,我可以 存储相关的外部id,以便 我可以生成url,例如 article.php?id=…)
Q2-这个系统似乎效率更高。。。尽管我如何搜索标题或描述

Q3-另一个不好的事情是,对于每个页面视图,我都必须加入标签。。因此,它的效率可能没有那么高

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

Q5-我将用户限制为4个标签,但我鼓励使用单个单词(stackoverflow样式)。。。我意识到,在我的系统中,搜索“火车站”与“火车站”这样的标签是不匹配的。我该如何避开这个问题呢


这么多问题。。。对不起,时间太长了。多谢各位

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

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

Q3-不要担心将标记表与其他表连接在一起。要解释Knuth,首先构建它,然后找到瓶颈。MySQL非常擅长它所做的事情。把这些桌子一次又一次地连在一起不会有什么坏处

问题4——这取决于你想从结果中得到什么。通常,您需要实际数据,然后只需测试返回的行数,就可以知道返回的行数是真是假

问题5——同样,在将查询传递到数据库之前,您必须使用“like”语法,可能还需要在PHP端使用一些创造性的正则表达式


祝你好运

谢谢你的回答。还有一个问题。。。您建议我将标题和描述放在哪里?在他们的原始表格中?他们似乎正在使用tag_target_name和tag_target_url构建指向标记内容的链接。您可以将标题和描述放在适当的位置,但更好的解决方案是将所有这些信息放在一个单独的“articles”表中,并将articles表中的行的id存储到tag_targets表中。这样你就不会重复每篇文章中每个标签的标题和描述。