繁体   English   中英

为网站创建智能的预测搜索

[英]Creating a smart predictive search for website

我正在尝试为我正在制作的网站编写一个预测性搜索系统。

完成的功能将非常像这样:

在此处输入图片说明

我不确定执行此操作的最佳方法,但是到目前为止,这是我所拥有的:

搜索表:
id-期限-计数

每次进行搜索时,都会将其插入到搜索表中。


当用户在搜索输入中输入字符时,将发生以下情况:

  1. 该页面向搜索PHP文件发出AJAX请求
  2. PHP文件连接到MySQL数据库并执行查询: SELECT * FROM searches WHERE term LIKE 'x%' AND count >= 10 ORDER BY count DESC LIMIT 10 (x =搜索输入中的文本)
  3. 然后,根据页面上列出的10条基于过去搜索条件的排名最高的结果

该解决方案远非完美。 如果任何随机人搜索相同的术语10次,它将显示为推荐搜索(如果有人要搜索以相同字符开头的术语)。 我的意思是,如果有人搜索“ poo poo” 10次,然后该网站上有人搜索“ po”以寻找土豆,那么他们就会将“ poo poo”视为热门搜索。 这不酷

我想出了一些解决此问题的想法。 例如,我可以将搜索表中的每个插入查询限制为用户的IP地址。 但是,这不能完全解决问题,如果用户具有动态IP地址,则可以重新启动调制解调器并在每个IP地址上执行10次搜索。 当然,必须输入的次数可能仍然是秘密,因此它更加安全。

我想另一种解决方案是添加一个黑名单,以从显示中删除“ poo poo”之类的词。

我的问题是 ,是否有更好的方法做到这一点?还是我沿着正确的方向前进? 我想编写允许扩展的代码。

谢谢

您走在正确的轨道上。

我会做什么:

  1. 您可以唯一地存储每个查询。 添加一个表来跟踪该搜索词的每个IP,并且每个IP仅更新一次您的计数
  2. 如果某个新的/唯一的关键字在X天内的更新次数超过X次,请让系统向您/您的管理员发送邮件,以便您有机会手动将其列入黑名单。 这必须是手动的,因为某些热门话题也可能显示此行为。
  3. 这是最有趣的一个:查询完成后,检查结果量。 建议没有结果的关键字是毫无意义的。 因此,仅建议至少提供X数量结果的查询。 “ poo poo”之类的查询不会给出任何结果,因此它们不会显示在您的建议列表中。

我希望这有帮助。 如果您有任何疑问,请通过聊天与我进一步交谈:)

例如,您可以添加一个新的布尔列(称为validate),并避免使用黑名单。 如果validate为false,则不会出现在推荐列表中

管理员可以通过查询或后台工具手动调整此字段。 您可以添加另一列称为audit的列,该列存储查询的时间戳。 如果最大时间戳和最小时间戳之间的差异超过一个值,则默认情况下validate字段可能为false。

此解决方案可轻松快速地发展您的想法。

祝您好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM