如何构建自动完成 API?

Mar*_*Lau 5 api autocomplete

我正在努力构建一个合适的自动完成功能。我正在通过构建一个非常简单的 API 来练习,该 API 可以自动完成用户的姓名。

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

我关心前端如何与这个 API 通信。这样做的明显方法是在搜索输入的每次按键之后调用 API。但是,这是发送的大量请求。在延迟之后拨打电话以减少请求感觉很麻烦。有没有合适的方法来做到这一点?

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

Pet*_*ses 5

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


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

此外,Elasticsearch 通常会快速处理自动完成请求(<10 毫秒),释放集群资源的速度比搜索请求快得多。


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

  1. 在触发自动完成之前施加最小条目长度(通常为 2-3 个字符)。
  2. 在触发之前在 keyup (0.1-0.3s) 之后添加一个短暂的延迟,以便快速/自信的打字员不会产生大量不必要/中间的完成请求。
  3. 在浏览器中缓存最近的完成列表,以便 <backspace> 键击不会触发服务器请求。
  4. 在浏览器中预先缓存建议(如果可行/有界 - 例如导航、朋友/联系人姓名等...)

Twitter Typeahead.js整合了上述所有用于浏览器内自动完成的 API 流量优化。看一看!