php - 为网站创建智能预测搜索

标签 php mysql sql ajax search

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

完成的功能将很像这样:

enter image description here

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

搜索表:
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”来寻找土 bean ,他们就会将“poo poo”视为热门搜索。 这不酷

我确实想到了一些解决这个问题的想法。例如,我可以将搜索表中的每个插入查询限制为用户的 IP 地址。但这并不能完全解决问题,如果用户有一个动态 IP 地址,他们可以重新启动调制解调器并对每个 IP 地址执行 10 次搜索。当然,必须输入的次数可以保密,这样会更安全一些。

我想另一种解决方案是添加一个黑名单以删除诸如“poo poo”之类的词。

我的问题是,是否有更好的方法,或者我是否在沿着正确的方向前进?我想编写能够扩大规模的代码。

谢谢

最佳答案

你走在正确的轨道上。

我会做什么:

  1. 您唯一地存储每个查询。添加一个表格来跟踪该搜索词的每个 IP,并且每个 IP 只更新一次计数
  2. 如果某个新的/独特的关键字在 X 时间段内被计数超过 X 次,让您的系统给您/您的管理员发邮件,这样您就有机会手动将他们的关键字列入黑名单。这必须手动进行,因为一些热门话题也可能会出现这种行为。
  3. 这是最有趣的一个:查询完成后,检查结果的数量。建议没有结果的关键字是没有意义的。所以只建议至少会给出 X 数量结果的查询。像“poo poo”这样的查询不会给出任何结果,因此它们不会出现在您的建议列表中。

希望对您有所帮助。如果您有任何问题,请在聊天中与我进一步交谈 :)

关于php - 为网站创建智能预测搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19566483/

相关文章:

php - 在 PHP 中设置环境属性

php - 错误 : mysqlnd cannot connect to MySQL 4. 1+ 使用旧的不安全身份验证

php - 根据另一个表的选择结果选择一个表

mysql - 使用替换值更新查询

php - 如何解决具有大量值的行查询,缓冲查询超出了 10240 KB 的内存限制

php - 如何统计最后: hour/day/week/month/year ?中访问次数最多的页面 - PHP+MySQL

mysql - 在 DATETIME 字段中插入明天的日期 + 小时

mysql - 获取具有相似声音的记录

php - 如何获取当前日期与数据库中的日期之间的差异并将其显示在表中

php - 获取列总和的SQL