【发布时间】:2011-05-06 03:32:54
【问题描述】:
这个问题很简单。在 Web 应用程序的客户端中让自动完成变得漂亮很简单。有很多插件。
但是,在后台,在服务器端,最好的方法是什么?我不喜欢在用户按下每个键时都点击数据库的想法。
我一直在考虑 sphinx,或与您的网站并行运行的一些全文搜索引擎。
例如,如果我有一个 PHP(高流量)网站,我可以创建一个并行 python 脚本,从我的“自动完成文本框”获取 http 请求。然后,当用户在客户端按下某个键时,AJAX 请求会被定向到可以使用特殊策略的 Python 脚本。
你的方法是什么?
一些约定:
- 尽量不要撞到数据库。我的意思是,得到 请求并做某事 SELECT * FROM foo WHERE bar LIKE "req%" 不是 一个很好的答案。这可能是一个好 策略,但我知道该怎么做。*
- 复制数据可能是一个不错的选择。
【问题讨论】:
-
您似乎对服务器端可用的语言和技术有一些未说明的假设。如果你能说出它们,给出一个有说服力的答复会更容易。
-
候选字符串集有多大?使用什么标准对它们进行排名(即每个人、每个用户甚至每个请求的标准都相同)?
-
@bmargulies 我正在尝试专注于架构。但是,作为指导。 “搜索框架”(例如 Lucene、Sphinx、Memcache 等)可以是任何可以安装在 Linux 服务器上的东西。然后,关于语言,如果它是一个广泛采用的框架,它会有库,但可以考虑好的语言:Java、Phython、PHP。
-
@Ian Mackinnon 好问题。它是一个小型数据集(例如网站的所有关键字)并且相对静态。不了解“排名标准”的东西。
-
@santiago,我所说的排名是指您如何将建议列表排序给用户。例如。 “按字母顺序”对所有用户都是相同的,“此用户最近搜索过”将是每个用户、每个请求排名的示例。
标签: database performance optimization autocomplete full-text-search