在服务器中实现AutoComplete的最佳方法是什么?

san*_*lto 5 database optimization performance full-text-search autocomplete

这个问题很容易.在Web应用程序的客户端使自动完成很漂亮很简单.有很多插件.

但是,在服务器端的背面,最好的方法是什么?我不喜欢用用户按下每个按键来击中数据库的想法.

我一直在考虑sphinx,或者从你的网站并行运行的一些全文搜索引擎.

例如,如果我有一个PHP(高流量)网站,我可以创建一个并行python脚本,从我的"自动完成文本框"获取http请求.然后,当用户按下客户端的密钥时,AJAX请求将被定向到可以使用特殊策略的python脚本.

什么是你的方法?

一些惯例:

  • 尽量不要打DB.我的意思是,得到请求并做一些SELECT*FROM foo WHERE bar LIKE"req%"不是一个好的答案.这可能是一个很好的策略,但我知道该怎么做.*
  • 复制数据可能是一个不错的选择.

Ami*_*far 8

我同意你需要一些更好的解决方案.Apache solr有一个"建议"功能,你可以使用得很好.如果您的数据集很小,那么将所有数据放入内存中,然后进行简单的循环.

在前端,我建议使用setTimeout()在触发ajax调用之前等待大约200ms.如果在200ms内触发另一次击键,则取消最后一次超时并启动另一次超时.这是一个非常干净的解决方案,每次按键都不会达到db.我过去曾经使用它,效果很好.

这解释了使用jquery的solr以及如何非常好地创建自动完成. http://www.mattweber.org/2009/05/02/solr-autosuggest-with-termscomponent-and-jquery/