如何在大型数据库中使用typeahead.js
How to use typeahead.js with a large database
我有一个包含10000个地址和5000人的大型数据库。
我想让用户在数据库中搜索地址或用户。我想在他们输入文本时使用推特的排版来建议结果。
请参阅此处的NBA示例:http://twitter.github.io/typeahead.js/examples.
我知道,从速度和负载的角度来看,预取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
上,您可以捕获此查询并在DB:中查找它
$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查询以更快地查询,也许可以缓存结果,等等。
在预编型方面,为了减少查询DB的负载,可以指定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中的一个例子,但当然,无论您有什么后端,它都应该是相同的。希望你明白基本的想法。
相关文章:
- Typeahead.js未显示异步结果
- jquery.proxy in the bootstrap-typeahead.js context
- 如何扩展bootstrap-typeahead.js这样的库
- 如何将typeahead.js(Bloodhound)添加到jQuery动态创建的字段中
- 通过Typeahead.js提供建议
- 如何让Typeahead.js使用对象的一个字段而不是全部字段自动完成或选择
- TypeAhead.js没有显示任何输出Rails
- 停止jQuery表单验证重置由其他JavaScript填充的typeahead.js输入字段
- 如何禁用typeahead:在远程typeahead.js中聚焦已填充的文本字段时处于活动状态
- Typeahead.js未显示预取数据的自定义模板
- 通过data URL参数将URL传递给typeahead.js
- 如何将typeahead.js与nested_form gem一起使用
- 使用Typeahead.js/Bloodhound.js在远程和本地源之间切换
- 阻止typeahead.js下拉列表在选择时关闭
- Typeahead.js-特殊字符返回为“”&#230"等
- Typeahead.js远程工作,但预取不工作't
- 从输入框中删除 TypeAhead.js 事件
- 为什么typeahead-js不在Meteor上运行,而是在本地工作
- Twitter Typeahead.js库是否仅限于6个数据集
- 如何为Facebook好友搜索实现Typeahead JS