我想为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