按标签列表查找相关帖子

时间:2012-03-05 09:17:07

标签: php sql algorithm

我有一个包含新闻帖子的表,此表中的一个字段是'tags'字段,其中包含逗号分隔标记列表 - 为什么这种情况无关紧要,因为这是一个遗留表和标签现在无法移植到另一个表,也不会对表结构或应用程序的功能进行任何更改。

我正在尝试确定查询数据库以查找具有类似标记的帖子的最佳方法。

有没有人比分割和修剪标记字段以及执行​​LIKE查询有更好/更智能的解决方案?

3 个答案:

答案 0 :(得分:1)

如果您无法触摸数据库,可以在数据库外部添加其他搜索索引,例如Lucene还是狮身人面像?

如果我们不讨论潜在的大量数据,你甚至可以使用ZF的Zend_Search_Lucene来实现Lucene索引而无需任何外部服务/软件安装等。

然后,您可以按标记索引帖子,使用索引查找具有特定标记(或标记和其他属性的组合)的帖子,并根据从Lucene返回的ID从DB获取相关结果。

答案 1 :(得分:0)

您可以在tagstags_posts表之间创建tags表和多对posts表。

然后,您可以将posts.tags列迁移到tagstags_posts

最后,您可以查询tags_posts而不是posts.tags

答案 2 :(得分:0)

转向sphinx / lucene体系结构需要做一些工作,然后将标签移到单独的表中会更难。 最简单的解决方案,而不是获取所有字符串并解析所有字符串,您可以运行类似于WHERE instr(concat(",", tags_field,","), ',php,') > 0的搜索