";附近的单词“;字典界面的滚动条


"Nearby Words" Scrollbar for Dictionary Interface

我想为www.dictionary.com上的条目实现一个与"附近的单词"栏非常相似的功能

示例

我的数据库有大约47000个条目,所以我不认为一次加载所有条目是可行的(但我可能错了)。

有人对我应该如何实现这一点有任何想法(或例子)吗?

我感谢你的帮助,希望你们周末过得愉快!

编辑:到目前为止,我已经实现了一个具有自动完成功能的搜索栏,它可以为搜索到的单词提取正确的信息。例如,搜索"X"会生成一个具有X的定义、词性等的页面。我想做的是在这个生成的页面上添加一个按字母顺序排列在X前后的单词滚动条。

首先,47K条目可能很小,也可能很大,这取决于记录大小和服务器(?)当前负载。我建议您实现一个SQL查询(当然假设您有一个SQL数据库),它将使用LIKE为特定列检查相关建议。出于这个目的,我建议你只在用户按下3个(或类似的)字母后才开始搜索数据库,因为例如,如果他按下1,你的服务器可能会有很大的开销。

编辑:(评论摘要)

对于包含前20个单词和后20个单词的相关单词的滚动条,强烈建议在单个服务器调用中使用40个以上的单词。

这是因为单个服务器调用带来20或200将花费大致相同的时间,因为大部分时间通常用于向服务器传递请求。向服务器请求一个较小的范围,接近显示的范围,将导致更多的服务器调用,从而导致更高的开销和更长的执行时间。

缓存未在客户端显示的结果,并在用户滚动出范围(或接近范围)时实现使用这些结果的逻辑,将使执行更加顺利。

我认为您的问题更多地与前端开发有关,这就是为什么我认为您应该考虑javascript解决方案来实现此功能。

您可以使用JQuery自动完成插件和html字段。

你可以在这里找到一个例子:JQuery自动完成

并链接将查询数据库的PHP脚本的JSON输出。

您将在字段中至少有2/3个字符后限制请求,并在文本字段中最后一次输入后一秒钟刷新请求。

你可以在这里找到一个适合你需要的好教程:

JQuery使用PHP/MySQL自动完成教程

编辑:

您可以实现的结果如下(Javascript代码):

$(function() {
var words = [
  {
    value: "doe",
    label: "doe",
    desc: "additional description for doe",
  },
  {
    value: "doi",
    label: "doi",
    desc: "additional description for doi",
  },
  {
    value: "dog",
    label: "dog",
    desc: "additional description for dog",
  },
  {
    value: "dog catcher",
    label: "dog catcher",
    desc: "additional description for dog catcher",
  },  
  {
    value: "dog sitter",
    label: "dog sitter",
    desc: "additional description for dog sitter",
  }
];
$( "#word" ).autocomplete({
  minLength: 0,
  source: words,
  focus: function( event, ui ) {
    $( "#word" ).val( ui.item.label );
    return false;
  },
  select: function( event, ui ) {
    $( "#word" ).val( ui.item.label );
    $( "#word-id" ).val( ui.item.value );
    $( "#word-description" ).html( ui.item.desc )
    return false;
  }
})
.data( "ui-autocomplete" )._renderItem = function( ul, item ) {
  return $( "<li>" )
    .append( "<a>" + item.label + "<br>" + item.desc + "</a>" )
    .appendTo( ul );
};
 });

使用自定义JQuery自动完成的JSFiddle