我有一个包含新闻帖子的表,此表中的一个字段是'tags'字段,其中包含逗号分隔标记列表 - 为什么这种情况无关紧要,因为这是一个遗留表和标签现在无法移植到另一个表,也不会对表结构或应用程序的功能进行任何更改。
我正在尝试确定查询数据库以查找具有类似标记的帖子的最佳方法。
有没有人比分割和修剪标记字段以及执行LIKE查询有更好/更智能的解决方案?
答案 0 :(得分:1)
如果您无法触摸数据库,可以在数据库外部添加其他搜索索引,例如Lucene还是狮身人面像?
如果我们不讨论潜在的大量数据,你甚至可以使用ZF的Zend_Search_Lucene来实现Lucene索引而无需任何外部服务/软件安装等。
然后,您可以按标记索引帖子,使用索引查找具有特定标记(或标记和其他属性的组合)的帖子,并根据从Lucene返回的ID从DB获取相关结果。
答案 1 :(得分:0)
您可以在tags
和tags_posts
表之间创建tags
表和多对posts
表。
然后,您可以将posts.tags
列迁移到tags
和tags_posts
。
最后,您可以查询tags_posts
而不是posts.tags
。
答案 2 :(得分:0)
转向sphinx / lucene体系结构需要做一些工作,然后将标签移到单独的表中会更难。
最简单的解决方案,而不是获取所有字符串并解析所有字符串,您可以运行类似于WHERE instr(concat(",", tags_field,","), ',php,') > 0
的搜索