我正在尝试为我正在制作的网站编写预测搜索系统。
完成的功能将非常类似:
我不确定这样做的最好方法,但到目前为止我还有:
搜索表:
id - term - count
每次进行搜索时,都会将其插入搜索表中。
当用户在搜索输入中输入字符时,会发生以下情况:
SELECT * FROM searches WHERE term LIKE 'x%' AND count >= 10 ORDER BY count DESC LIMIT 10
(x =搜索输入中的文本)这个解决方案远非完美。如果任何随机人员搜索相同的术语10次,那么它将显示为推荐搜索(如果有人在哪里搜索以相同字符开头的术语)。我的意思是,如果有人搜索“poo poo”10次,然后网站上有人搜索“po”寻找土豆,他们会将“poo poo”视为热门搜索。 这不酷。
我想到了解决这个问题的一些想法。例如,我可以将每个插入查询限制在搜索表中,以限制用户的IP地址。但这并没有完全解决问题,如果用户有动态IP地址,他们可以重新启动调制解调器并在每个IP地址上执行10次搜索。当然,它必须输入的次数可能仍然是一个秘密,所以它更安全。
我想另一个解决方案就是添加一个黑名单来删除像“poo poo”这样的单词。
我的问题是,有更好的方法可以做到这一点,还是我沿着正确的方向前进?我想编写能够扩展的代码。
由于
答案 0 :(得分:2)
你走在正确的轨道上。
我会做什么:
我希望这会有所帮助。如果您有疑问,请在聊天中与我联系:)
答案 1 :(得分:0)
例如,您可以添加一个名为validate的新布尔列,并避免使用黑名单。如果validate为false,则不会出现在推荐列表中
此字段可由管理员手动调整(通过查询或后台工具)。您可以添加另一个名为audit的列,该列存储查询的时间戳。如果最大和最小时间戳之间的差异超过某个值,则默认情况下验证字段可能为false。
这个解决方案可以轻松快速地发展您的想法。
问候并祝你好运。