从MySQL数据库中提取类似项目的最佳方法

时间:2011-09-04 15:20:55

标签: mysql similarity

我有一个项目数据库(关于这个问题的文章) 我想做的是,我想基于两件事来拉出与特定项目类似的X项目 - 标题,即文章的标题,以及标签,它们位于另一个表格中。

结构如下(仅限相关领域):

表:文章
字段:articleid,title

表:标签
字段:tagid,tagtext

表:articletag
字段:tagid,articleid

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

对于myisam表,您可以使用自然语言全文搜索: http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html

SELECT * FROM article a
LEFT JOIN articletag at ON (at.articleid = a.articleid)
LEFT JOIN tag t ON (at.tagid = t.tagid)
WHERE MATCH (a.title) AGAINST ('some title' IN NATURAL LANGUAGE MODE)
OR MATCH (t.tagtext) AGAINST ('some tag' IN NATURAL LANGUAGE MODE)
GROUP BY a.articleid # if you don't want get duplicates 

您还可以考虑将有关标记的冗余信息添加到文章表中的一个字段(例如<taga><tagb><tagz>)中,并在每次添加/删除标记时更新它。这将简化查询,它应该更快:

SELECT * FROM article a
WHERE MATCH (a.title, a.tagtext) AGAINST ('some title or tag' IN NATURAL LANGUAGE MODE)