我正在尝试为我正在制作的网站编写预测搜索系统。
完成的功能将很像这样:
我不确定做到这一点的最佳方法,但这是我目前所拥有的:
搜索表:
id - term - count
每次进行搜索时,都会将其插入到搜索表中。
当用户在搜索输入中输入字符时,会发生以下情况:
- 页面向搜索 PHP 文件发出 AJAX 请求
- PHP 文件连接到 MySQL 数据库并执行查询:
SELECT * FROM searches WHERE term LIKE 'x%' AND count >= 10 ORDER BY count DESC LIMIT 10
(x = 搜索输入中的文本) - 然后在页面上列出基于过去搜索条件的 10 个最佳结果
这个解决方案远非完美。如果任何随机人搜索相同的词 10 次,那么它将显示为推荐搜索(如果有人在哪里搜索以相同字符开头的词)。我的意思是,如果有人搜索“poo poo”10 次,然后有人在网站上搜索“po”来寻找土豆,他们会认为“poo poo”是一个热门搜索。这不酷。
解决这个问题的一些想法确实浮现在我的脑海中。例如,我可以将搜索表中的每个插入查询限制为用户的 IP 地址。但是,这并不能完全解决问题,如果用户有一个动态 IP 地址,他们可以重新启动调制解调器并对每个 IP 地址执行 10 次搜索。当然,它必须输入的次数可能仍然是一个秘密,所以它更安全一些。
我想另一种解决方案是添加一个黑名单以删除“poo poo”之类的词出现。
我的问题是,有没有更好的方法来做到这一点,或者我是否沿着正确的路线前进?我想编写允许它扩大规模的代码。
谢谢