Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Jquery i autocomplete
Forum PHP.pl > Forum > Przedszkole
maiq23
Witam,

Interesuje mnie ten skrypt.
Znalazłem na forum info, że w pliku autocompelete.php trzeba podać wszystkie możliwości,
które będą wyświetlane jako podpowiedź.

Mam bardzo dużą bazę danych i tysiące różnych fraz które są wpisywane.
Jak w takim wypadku stworzyć listę najtrafniejszych podpowiedzi ?
A gdyby dodawać tam każdą frazę, którą wpisał użytkownik to miałoby to sens ?
A może trzeba zapisywać wszystkie wyszukiwania i dodać tam załóżmy tylko te które się powtarzają (czyli popularne),
ale znowu raz użytkownik szukając danej rzeczy wpiszę ją w takiej formie a raz w innej więc to chyba do końca jest dobre.

Jeśli ma ktoś jakieś doświadczenia w tej dziedzinie to proszę o info.
askone
A dlaczego w pliku?? Poczytaj wpierw instrukcję. Z tego co pamiętam skrypt może pobierać dane z różnych źródeł np.: skryptu PHP (a więc bazy MySQL), tablicy javascript.

Pozdrawiam
maiq23
No ok. Pobierać może albo z pliku albo z bazy, ale chodzi mi o jakość podpowiedzi i wysoką wydajność.
Załóżmy, że mam w bazie 1mln rekordów.
Mogę sobie to pobrać bezpośrednio lub wrzucić w plik, ale jaka będzie wtedy obciążenie serwera i szybkość działania ?

Zastanawia mnie jak rozsądnie wybrać te dane, które są najistotniejsze jako podpowiedzi dla usera?
askone
Musisz ustawić warunek brzegowy tj. długość tekstu jaki musi wprowadzić użytkownik aby skrypt wysłał żądanie do skryptu i tym samym pobrał z bazy dane o wynikach do wyświetlenia. Skrypt jquery autocomplete działa w ten sposób, że jeśli już zacznie pobierać dane to po każdorazowej dodatkowej literze zakres danych jest ograniczany, więc wyniki stają się coraz bardziej wartościowe dla użytkownika.
maiq23
Rozumiem.
To rzeczywiście zawęża listę wyników, ale również użyteczność.
Jeśli np. dopiero po 5 znaku będę szukał podpowiedzi to trochę nie tak jak bym chciał.

Powiedzmy że po każdej literze wpisanej w formularz, chciałbym dostawać 10 najtrafniejszych podpowiedzi.
Tak samo po ilości znaków z zakresu 2-4 a gdy znaków jest 5 skrypt przeszukuje bazę.
Podobnie jest na google.

Gdy wpiszę "m" mam 10 wyników i tak dalej...
Można by kombinować z ręcznym tworzeniem listy podpowiedzi dla każdej (jednej wpisanej) litery, ale gdyby ich było 2-4
to kombinacji jest multum, więc tylko jakiś automat który stworzy 'stałe' listy podpowiedzi dla nich.

Abstrahując od metody, gdyby udało mi się uzyskać listy 10 podpowiedzi dla każdej kombinacji 1-4 znaki, to dałoby się to jakoś podpiąć
pod autocomplete, aby równolegle korzystało ono z plików z danymi i bazy (w przypadku dłuższych stringów) ?
erix
Cytat
pod autocomplete, aby równolegle korzystało ono z plików z danymi i bazy (w przypadku dłuższych stringów) ?

No a czemu nie? Robisz prosty cache oparty o mod_rewrite - pozostaje tylko generowanie nazw plików, aby ubezpieczyć, ale załóżmy, że po prostu zamieniasz nazwy liter na jego numeryczne odpowiedniki (odpadają znaki specjalne w nazwach, etc) i zmieniasz system liczbowy na hex. wink.gif

Wówczas wygląda to tak:
- delikwent klepie "ala ma kota"
- dekodujesz każdy znak do jego pozycji w ASCII (aby uprościć, strtolower), wygląda to mniej-więcej tak (nie te kody wink.gif) 03204495983458AF (zaletą czegoś takiego jest to, że kodowanie zawierasz w max 10 linijkach, a nie kilkudziesięciu, jak w przypadku CRC32).
- wysyłasz do serwera żądanie /autocomplete/03204495983458AF.json
- za pomocą reguł rewrite jest sprawdzane, czy plik żądany istnieje: jeśli nie, wykonywany jest odpowiedni kontroler+akcja, które pobierają dane, wysyłają do przeglądarki i przy okazji zapisują do pliku o wspomnianej wcześniej nazwie
- następne żądanie jest już pobierane jako plik statyczny.

Jeśli dodasz do tego nagłówki + śmieciarkę, która zadba o aktualizację cache'u, masz całkiem sprawne rozwiązanie. wink.gif
maiq23
No to chyba sporo mi wyjaśniłeś w kwestii mojego problemu.
Teraz spróbuję przetrawić Twoją wiedzę, bo jest to 'troszkę' bardziej złożone niż zakładałem, ale wygląda sensownie.

Gdyby ktoś miał jeszcze jakieś pomysły, proszę się nie krępować, aczkolwiek pomysł Erixa wydaje się być ciekawym rozwiązaniem smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.