通过标签列表查找相关帖子


locating related posts by tag list

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

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

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

如果你不能触摸数据库,你能在数据库外部添加一个额外的搜索索引吗,例如Lucene或Sphinx?

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

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

您可以创建一个tags表,以及tagsposts表之间的多对多tags_posts表。

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

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

转移到sphinx/lucene架构需要做一些工作,这将比将标签转移到单独的表更困难。最简单的解决方案是,您可以运行类似于WHERE instr(concat(",", tags_field,","), ',php,') > 0

的搜索,而不是获取所有字符串并解析所有字符串