为网站创建智能预测搜索
Posted
技术标签:
【中文标题】为网站创建智能预测搜索【英文标题】:Creating a smart predictive search for website 【发布时间】:2013-11-03 04:37:51 【问题描述】:我正在尝试为我正在制作的网站编写预测搜索系统。
完成的功能会很像这样:
我不确定最好的方法,但这是我目前所拥有的:
搜索表: 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”之类的词出现。
我的问题是,有没有更好的方法来做到这一点,或者我是否沿着正确的路线前进?我想编写代码来扩大规模。
谢谢
【问题讨论】:
一个建议是不要进行 AJAX 调用,除非文本框有一定数量的字符。我喜欢数字 3。此外,除非 mysql 支持对 varchar 列不区分大小写的查询,否则请考虑切换到 sql server。要么以小写形式存储所有内容,然后在使用之前将搜索参数转换为小写。 @DanBracuk 这些改进当然是我自己还没有想到的好。谢谢! 【参考方案1】:你在正确的轨道上。
我会做什么:
-
您可以唯一地存储每个查询。添加一个表格来跟踪该搜索词的每个 IP,并且每个 IP 只更新一次计数
如果某个新的/唯一的关键字在 X 时间段内的计数超过 X 次,请让您的系统向您/您的管理员发送邮件,以便您有机会手动将其关键字列入黑名单。这必须手动进行,因为某些热门话题也可能会显示此行为。
这是最有趣的一个:一旦查询完成,检查结果的数量。建议没有结果的关键字是没有意义的。所以只建议至少会给出 X 数量结果的查询。像“poo poo”这样的查询不会给出任何结果,因此它们不会显示在您的建议列表中。
我希望这会有所帮助。如果您有任何问题,请在聊天中进一步与我交谈 :)
【讨论】:
【参考方案2】:例如,您可以添加一个名为 validate 的新布尔列,并避免使用黑名单。如果 validate 为 false,则不会出现在推荐列表中
管理员可以手动调整此字段(通过查询或后台工具)。您可以添加另一个名为 audit 的列,它存储查询的时间戳。如果最大和最小时间戳之间的差值超过某个值,则验证字段默认为 false。
此解决方案可轻松快速地开发您的想法。
问候,祝你好运。
【讨论】:
以上是关于为网站创建智能预测搜索的主要内容,如果未能解决你的问题,请参考以下文章