Ponieważ nikt nie udzielił żadnej odpowiedzi, postąpię zgodnie z moją sugestią.
Myślę, że najlepiej pasuje do Twojej dużej bazy danych przy użyciu remote
z typeahead.js
. Krótki przykład:
$('#user-search').typeahead({
name: 'user-search',
remote: '/search.php?query=%QUERY' // you can change anything but %QUERY
});
Co robi to podczas wpisywania znaków w input#user-search
wyśle żądania AJAX do strony search.php
z zapytaniem jak treść wejściu.
Na search.php
można złapać tej kwerendy i szukać go w 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);
Oczywiście ponieważ Twój DB jest dość duże, należy zoptymalizować zapytanie SQL kwerendy szybciej, może buforować wynik, itp
na stronie wpisywanie znaków z wyprzedzeniem, w celu zmniejszenia obciążenia kwerendy DB można określić minLength
lub 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
});
Tak naprawdę nie ma znaczenia, jak duże jest twoje DB, to podejście powinno dobrze działać.
To jest przykład w PHP, ale oczywiście powinien on być taki sam dla każdego backendu. Mam nadzieję, że otrzymasz podstawowy pomysł.
'remote' jest tym, czego potrzebujesz. Sprawdź dwa ostatnie przykłady: –
Po prostu pomysł, po prostu wybierz minimalną liczbę znaków, a następnie uruchom funkcję z głowicą z tylko danymi pasującymi do pola reasearch. W ten sposób nie będziesz mieć 15000 przedmiotów. Ale nie jestem pewien, czy nie będzie cięższy, jeśli użytkownik jest jakimś maniakiem badań. – nubinub