小编典典

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

ajax

我有10,000个地址和5,000人的大型数据库。

我想让用户在数据库中搜索地址或用户。在输入文本时,我想使用Twitter的提前提示功能来建议结果。

在此处查看NBA示例:http :
//twitter.github.io/typeahead.js/examples

我了解从速度和负载的角度来看,预取15,000个项目并不是最佳选择。尝试实现此目标的更好方法是什么?


阅读 237

收藏
2020-07-26

共1个答案

小编典典

由于没有人回答,因此我将继续我的建议。

我觉得你的大数据库最适合使用remotetypeahead.js。快速示例:

$('#user-search').typeahead({
    name: 'user-search',
    remote: '/search.php?query=%QUERY' // you can change anything but %QUERY
});

它的作用是当您在中键入字符时,input#user-search它将向页面发送AJAX请求,并将search.php查询作为输入内容。

在上,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查询以加快查询速度,也许可以缓存结果,等等。

在预输入方面,要减少查询数据库的负载,可以指定minLengthlimit

$('#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中的一个示例,但是对于任何后端,当然都应该相同。希望你得到基本的想法。

2020-07-26