2010-01-13 81 views
4

我正在一个有用户和用户生成的文章,画廊和视频的网站上工作。我正在尝试制作一个标记系统并搜索它们。哪个搜索/标签系统更好?

起初我在考虑tbl_articles,tbl_galleries和tbl_videos我会有一个标题,描述和标签字段。然后运行像每个以下查询:为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 

相同的查询。用户只需比较用户名即可。然后用“更多”按钮(脸谱风格)在结果页面上显示三个。

当查看文章,图库或视频时,也会有链接到相关内容,所以我只想在LIMIT设置为'1,3'时使用相同的查询 - 以避免出现。

Q1 - 该系统如何?

我很高兴与系统,直到我发现this

在他们有

  • 一个“标签”表包含两个 列的主ID和一个独特的 索引TAG_NAME。
  • 一个“类型”表,他们有 另一主ID和一个独特的 索引“类型”(类别)(我想 我可以用它来 用户/视频/条/画廊)
  • 一个'搜索“表中包含 文章的网址,其中来自'tags'和'type'的外部ID为 。 (我想 ,而不是一个完整的URL我可以 店国外相关ID,以便 我可以生成URL如 article.php ID = ....?)

Q2 - 这系统看起来效率更高......虽然我如何搜索标题或描述?

Q3 - 另一个坏事是每个页面视图我都必须加入标签..所以它可能不是那么高效。

Q4 - 我的系统也只搜索布尔值,我会更喜欢'喜欢'查询吗?我只是鼓励单词(stackoverflow样式)...我意识到尽管在我的系统中搜索'火车站'不会匹配像'火车站'我怎么解决这个问题?

很多问题......很抱歉,它太长了。谢谢。

回答

2

Q1 - 您最好用三个独立的表格来搜索文章,标签以及链接表中的文章和标签。你也可以用两张表格和一张articles_tags表格来完成。 articles_tags表将包含articleID字段,并将标记本身作为复合键。通过两个或三个表格可以很容易地找到哪些文章具有给定的标签以及将哪些标签分配给给定的文章。第二季度 - 标题和描述搜索可以使用百分比“like”或正则表达式或全文搜索来完成。

Q3 - 不必担心与其他人连接标签表。为了解释Knuth,先构建它,然后找到瓶颈。 MySQL非常擅长它。一次又一次地将这些表连接在一起不会造成伤害。

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

Q5 - 同样,在将查询切换到数据库之前,您必须使用“like”语法,并且可能在PHP方面使用了一些创造性的正则表达式。

祝你好运!

+0

谢谢你的回答。还有一个问题......你在哪里推荐我把标题和描述放在他们的原始表格中? – Mark 2010-01-14 09:40:44

+0

看来他们使用tag_target_name和tag_target_url来构建链接到标记的内容。您可以将标题和描述放在他们的位置,但更好的解决方案是将所有信息放在单独的“articles”表中,并将articles表中的行的id存储到tag_targets表中。这样你就不会重复每篇文章中每个标签的标题和描述。 – 2010-01-14 14:46:55