Autocomplete 自动完成建议是如何工作的?

Autocomplete 自动完成建议是如何工作的?,autocomplete,Autocomplete,例如,如果您在firefox的右上角google/yahoo搜索框中键入某个内容,就会出现“建议自动完成”之类的内容 另一个例子是在youtube搜索框和Stackoverflow标签编辑框中,就在这个问题预览下面。它们是如何工作的?它们背后的技术是什么?通过使用AJAX,本网站提供了一个很好的教程: ,以及 据我所知,只有一个包含关键字和一点代码的数据库 我现在正在学习如何使用它,实际上是为了工作。:) 另一个资源是。他们也报道了这件事 他们通常使用JavaScript来: 查看所有可能值的

例如,如果您在firefox的右上角google/yahoo搜索框中键入某个内容,就会出现“建议自动完成”之类的内容


另一个例子是在youtube搜索框和Stackoverflow标签编辑框中,就在这个问题预览下面。它们是如何工作的?它们背后的技术是什么?

通过使用AJAX,本网站提供了一个很好的教程: ,以及

据我所知,只有一个包含关键字和一点代码的数据库

我现在正在学习如何使用它,实际上是为了工作。:)


另一个资源是。他们也报道了这件事

他们通常使用JavaScript来:

  • 查看所有可能值的本地数组
  • 在后台请求另一个页面(即/autocomplete.php?q=partialText)
  • 调用Web服务
当JavaScript具有要显示的条目列表时,它会修改页面以显示自动完成框

如果你想把一个自动完成框在你的网站上,我用过,并发现以下是非常好的。它还基于流行的jQuery框架


对于这一问题,答案和它们的不同实现一样多。我们的自动完成程序,您可以通过引发一个事件来查看示例,然后在.ASPX页面的codebehind中处理该事件,您可以从该页面使用所需的任何控件填充ControlCollection。然而,我们只使用文本控件,文本内容是锚链接。但是如果我们想的话,我们可以加上复选框或图片

如果你在ASP.NET上,我们的自动补全器是一个很好的起点。如果你在看“其他东西”,那么ScriptAculous AutoCompleter可能是另一个很好的开始…

很简单

客户端:

  • 在表单字段中抓取击键
  • 击键时向服务器发出AJAX请求
  • 如果立即输入另一个击键,请取消当前AJAX请求,因为它现在已过时
  • 使用表单字段中更新的字符创建新的AJAX请求
  • 向客户端显示服务器响应
  • 服务器端:

  • 所有单词都已按字母顺序排列
  • 如果客户请求输入“ove”,请按人气顺序查找所有以ove开头的单词
  • 将顶级匹配返回给客户端

  • .

    在这篇扣人心弦的杂志文章(下面的链接)中有一个优秀的开源国家选择器,其中包括使用简单的自动完成解决方案讨论可用性挑战,并修复它们

    虽然我是UX,而不是开发人员,但我相信一个聪明的开发人员可以将此开源代码改编为处理其他类型的选择,而不仅仅是国家名称。:)

    • 。试试看


    免责声明:我与制作这个国家选择器的人没有任何联系。我只是碰巧知道这一点,我喜欢与开发人员分享可用性的信息,FWIW。

    我最近也在开发自动完成功能,我们使用lucene对自动完成中显示的文本进行索引。lucene的搜索速度很快。使用自动完成数据时要注意的一些事项:

  • 新鲜的建议
  • 依赖于长期数据
  • 区域依赖性
  • 语言依赖
  • 他们背后有什么技术

    如果您想知道下面使用的是哪种数据结构,那么它被称为“trie”,并且与尝试相比使用更少的空间,您可以使用“DAFSA”

    它们是如何工作的

    两者都实现为树,其中树的每个节点对应于字符串中的一个字符,前面出现的字符是后面出现的字符的父级,例如存储在Trie(左)和DAFSA(右)中的字符串“tap”、“taps”、“top”和“top”,因此,当您开始键入tap时,将根据键入的字符遍历树,并根据分配给每个单词的某些权重显示建议,权重可能根据单词的使用频率分配

    在最坏的情况下查找字符串是O(m)时间,其中m是字符串的长度


    这张图片来自维基百科的文章:,

    我知道这是9年前的答案,但这是一个完美的例子,说明了为什么不应该只链接教程。现在该站点已关闭:(这个问题是在互联网档案版本中编辑的《自动完成的工作原理》中的第1个问题,谢谢大家的提醒!我认为在答案中加入enitre教程不是一个好主意——版权除外——因为有很多AJAX教程,而且可能有比这本9年前的更好的:)