如何构建自动完成API?

时间:2015-12-10 03:09:33

标签: api autocomplete

我正试图围绕构建正确的自动完成功能。我正在练习通过构建一个非常简单的API来自动填充用户的名字。

目前,我有一个包含given_namelast_name列的数据库。它们使用elasticsearch进行索引。而且,我已经构建了一个API,它接受一个搜索词来查询elasticsearch。

我关心前端如何与此API通信。这样做的显而易见的方法是在搜索输入的每个键盘之后调用API。但是,这是发送的很多请求。在延迟之后拨打电话以减少请求感觉 hacky 。有没有合适的方法呢?

我找到了很多关于如何构建elasticsearch API的指南,但没有任何内容将前端和后端组合在一起。

1 个答案:

答案 0 :(得分:3)

当然, 发出了很多电话!但对于大多数应用程序,建议选项的数量会排除基于客户端的自动完成。

但是,一个有效的自动完成功能应该通过减少拼写错误和零结果搜索等方式来减少发送/呈现(更多重量级)搜索请求的数量(同时提高搜索者体验)

此外,Elasticsearch通常提供 fast 自动完成请求(如< 10ms),从而比搜索请求更快地释放群集资源。

减少自动完成生成的服务器流量的常见调整包括:

  1. 在触发自动完成之前,施加最小输入长度(通常为2-3个字符)。
  2. 在启动之前添加一个短暂的延迟(0.1-0.3s),然后触发快速/自信打字员不会产生一连串不必要/中间完成请求。
  3. 在浏览器中缓存最近的完成列表,以便< backspace>击键不会触发服务器请求。
  4. 浏览器中的预缓存建议(可行/有界时 - 例如导航,朋友/联系人姓名等)
  5. Twitter Typeahead.js包含了针对浏览器内自动填充功能的所有上述API流量优化。看看吧!