Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在大型数据库中使用typeahead.js_Javascript_Ajax_Database_Typeahead.js - Fatal编程技术网

Javascript 如何在大型数据库中使用typeahead.js

Javascript 如何在大型数据库中使用typeahead.js,javascript,ajax,database,typeahead.js,Javascript,Ajax,Database,Typeahead.js,我有一个包含10000个地址和5000人的大型数据库 我想让用户在数据库中搜索地址或用户。我想使用Twitter的typeahead在输入文本时建议结果 请参见此处的NBA示例: 我知道从速度和负载的角度来看,预取15000个项目不是最佳选择。有什么更好的方法可以尝试实现这一点呢?既然没有人回答,那么我将继续我的建议 我认为最适合您的大型数据库的是使用remote和typeahead.js。快速示例: $('#user-search').typeahead({ name: 'user-s

我有一个包含10000个地址和5000人的大型数据库

我想让用户在数据库中搜索地址或用户。我想使用Twitter的typeahead在输入文本时建议结果

请参见此处的NBA示例:


我知道从速度和负载的角度来看,预取15000个项目不是最佳选择。有什么更好的方法可以尝试实现这一点呢?

既然没有人回答,那么我将继续我的建议

我认为最适合您的大型数据库的是使用
remote
typeahead.js
。快速示例:

$('#user-search').typeahead({
    name: 'user-search',
    remote: '/search.php?query=%QUERY' // you can change anything but %QUERY
});
它的作用是,当您在
input#user search
中键入字符时,它将向页面
search.php
发送AJAX请求,并将查询作为输入内容

search.php
上,您可以捕获此查询并在数据库中查找:

$query = $_GET['query'].'%'; // add % for LIKE query later

// do query
$stmt = $dbh->prepare('SELECT username FROM users WHERE username LIKE = :query');
$stmt->bindParam(':query', $query, PDO::PARAM_STR);
$stmt->execute();

// populate results
$results = array();
foreach ($stmt->fetchAll(PDO::FETCH_COLUMN) as $row) {
    $results[] = $row;
}

// and return to typeahead
return json_encode($results);
当然,由于数据库很大,您应该优化SQL查询以加快查询速度,可能会缓存结果,等等

在typeahead端,为了减少查询数据库的负载,可以指定
minLength
limit

$('#user-search').typeahead({
    name: 'user-search',
    remote: '/search.php?query=%QUERY',
    minLength: 3, // send AJAX request only after user type in at least 3 characters
    limit: 10 // limit to show only 10 results
});
因此,不管数据库有多大,这种方法应该可以很好地工作


这是PHP中的一个示例,但是对于任何后端,它都应该是相同的。希望您能了解基本的想法。

远程
是您所需要的。检查最后2个示例只是一个想法,只需选择最少数量的字符,然后启动typeahead功能,仅使用与reasearch字段匹配的数据。这样你就不会有15000件物品了。但不确定如果用户是某种研究狂,它是否会更重。你有没有调查过《猎犬》?我正试图把typeahed、knockout和Hound塞进我的脑袋里。虽然从我对《猎犬》的了解来看,它可以直接连接到typeahead。你会怎么做这个Ruby?@Jackson_Sandland,这取决于你使用的框架,我想你应该用标记Ruby的新问题来回答这个问题,对于remote,你现在必须使用《猎犬》。这个搜索是“实时”的吗?或者数据库结果只在页面加载时加载?因此,例如,如果向数据库中添加了一个条目,该条目是否立即可供用户使用?