Поскольку никто не ответил, я продолжу свое предложение.
Я думаю, что лучше всего подходит для вашей большой базы данных, используя remote
с typeahead.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);
Конечно, так как ваш DB довольно большой, вы должны оптимизировать ваш 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, но, конечно же, он должен быть одинаковым для любого имеющегося у вас бэкэнд. Надеюсь, вы получите основную идею.
'remote' - это то, что вам нужно. Проверьте последние 2 примера –
Просто идея, просто выбрали минимальное количество символов, а затем запустили функциональную функцию typeahead только с данными, соответствующими полю повторного поиска. Таким образом, у вас не будет 15000 предметов. Но не уверен, что это будет не тяжелее, если пользователь - своего рода исследовательский маньяк. – nubinub