我有一个名为“关键字”的表格,其中包含关键字列表(可能是短语或单个字词),其列为:ID,关键字。
还有另一个名为“已阻止”的表,其中包含应用于过滤“关键字”表的单词列表(单个单词,而不是短语)。它的列是:ID,Word。
我想知道一种快速方法或优化方法,可以过滤“关键字”表格中的关键字,其中包含“已屏蔽”表格中列出的所有字词。
例如,在“关键字”表中,我有这个列表:
1 - Facebook中的朋友
2 - 使用Facebook进行博客
3 - 寻找朋友
4 - 在Facebook上为朋友做点什么
5 - 编程很有趣
这是我的列表以及“阻止”表:
1 - 播放
2 - 朋友
3 - 找到
每当我从“关键字”表中获取关键字时,都应使用“已屏蔽”表中列出的字词进行过滤。因此,在这些列表中,如果我从“关键字”表中获取数据,我应该得到以下结果:
2 - 使用Facebook进行博客
5 - 编程很有趣
请注意,#1不包括在内,因为它包含单词“friend”(在“Blocked”表中列出)。 #3也不包含在内,因为它包含“find”。最后,#4不包括在内,因为它还包含“朋友”。
我最大的问题是使用什么样的方法来实现这一目标。请注意,我有大量的关键字(大约1000万条记录)和至少100个被阻止的单词。我为此开发了一个PHP + MySQL解决方案,但实际上它真的很慢。
希望你能给我你的解决方案或建议。
答案 0 :(得分:1)
如果你想要表现,你应该忘记尝试过滤这样的大表。
您应该创建另一个带有白名单词的表,这是在添加/删除/编辑列入黑名单的单词时生成的,并在需要此过滤器的查询上使用该表。当您根据可能添加/删除后备关键字的事件更新此表时,开销就会存在。
这样你就可以避免:
请记住,今天你有100个关键字,但明天你可以拥有1000个,并且使用除了在新表上预过滤结果之外的任何其他方法都会带来性能损失,并且总是会扩大你想要的内容之间的差距