Voi face o căutare live pe site (ca în Google). A găsit o mulțime de materiale pe această temă. Numai din cauza unui moment nu pot continua. Nivelul meu de cunoștințe este destul de mic și nu înțeleg cum să rezolv următoarele probleme:
Aici de pe site, cu ajutorul lui Ajax vine o cerere pentru un script .php, care ar trebui să ia de la baza de date infu. Întrebare - cum pot să mă conectez rapid la baza de date sau să o fac în avans? Explicații, nu am găsit. Înțeleg că cel mai mult timp este cheltuit pentru conectarea la baza de date. Nu este posibil să vă conectați la el după introducerea fiecărui caracter. Totul va fi atârnat. În toate exemplele pe care le-am văzut, am scris doar $ mysqli-> query (.). Șirul de conectare nu era acolo, ca și cum ar exista deja ca atare.
Am încercat să intru în sistemul de "legături permanente", dar n-am înțeles ce a fost. În plus, există restricții privind numărul de conexiuni simultane de acolo.
Doresc foarte mult să vă ajut cu această întrebare. Din cauza lui, întregul proiect stă literalmente.
Despre modul de implementare a finalizării automate este cel mai optim.
Doar căuta în mod clar ineficiente: o intrare de utilizator poate veni la o duzină de cereri, fiecare dintre care ajunge în baza de date, care, teoretic, se poate afla chiar milioane de înregistrări și orice căutare wildcard pentru dragoste de a suferi. acestea ar trebui să fie monitorizate cu atenție, astfel încât acestea să utilizeze de fapt indicii; În plus, frontendul cipat, folosind umerii sub forma numărului care vine pe site, poate pune cu ușurință totul prin trimiterea la cerere a fiecărei litere și înmulțirea traficului de intrare în două până la trei până la cinci ori. În general, modul în care lucrează și, în plus, cu diligență, lucrează rapid, dar nu instantaneu și necesită sprijin; În plus, fiecare actualizare a insertului va înlătura indexul și viteza.
Trie este construită pentru câteva secvențe care trebuie căutate (în acest caz, șiruri sau secvențe de caractere). Un nod din Trie este structura în care sunt stocate valorile. care vor fi discutate mai târziu, și link-uri către nodurile copil sub formă de hartă (matrice asociativă) - fiecare nod copil este stocat cu o cheie entitate din secvență (în acest caz, cheia este un simbol). Sub formă de valori, sunt stocate valori direct căutate sau trimiteri la acestea (de exemplu idem-uri, deși dacă trebuie să urce din nou în baza de date, este absolut ineficientă).
Atunci când Trie este populat, secvențele sunt convertite în ramuri care provin din nodul inițial, iar valoarea corespunzătoare acestei secvențe este scrisă la nodul corespunzător ultimei entități din secvență. Dacă pun în aplicare o căutare de produse și primesc intrarea "lapte", atunci voi construi o ramură de șase noduri din ea (dacă nu există deja în acel moment) și voi scrie produsul la ultimul nod. Dacă după aceea obțin un "lapte", atunci voi construi o ramură de nouă noduri (primele șase dintre ele deja există), iar în "d" voi scrie direct producătorului de lapte.
De ce este necesar? În cazul în care a) toate se încarcă în memorie, b) să păstreze între ele cereri de a nu încărca de fiecare dată (aici cu PHP va avea probleme, da, dar nimeni nu a abrogat demonii) și c) să descarce toate toate informațiile pe care trebuie să se acorde în căutare (care este rareori mai mult de două sau trei linii), apoi căutați primele rezultate N ale unui astfel de copac va fi realizată pentru o milisecundă chiar glanda Khrenovoe. Pentru a căuta pur și simplu se descompun șirul într-o secvență de caractere, găsiți nodul corespunzător, și umple coșul de căutare curentă, apoi nodurile copil, atâta timp cât nodurile copil nu au nici un scop sau coș este plin la partea de sus. În medie, spitalul va fi complexitatea de a găsi undeva șaisprezece caractere care incredibil de incredibil de bine în comparație cu trecere totală întreaga matrice.
Singura problemă cu Trie este că efectuează o căutare prefixă și pentru a găsi subrecursul pe care trebuie să-l hrăniți sufixele unul câte unul (o căutare eficientă fuzzy este greu de imaginat deloc); De asemenea, pentru căutarea eficientă este de obicei necesar să păstrați în apropiere o hartă obișnuită de un fel
Pe pagina unde va fi efectuată căutarea live, trebuie să creați o conexiune permanentă folosind mysqli:
Pentru ca conexiunea să fie permanentă, trebuie să adăugați prefixul "p:". Știam despre asta.
După aceea, la începutul scriptului php, accesat de ajax, este necesar să scrieți aceeași linie. Dacă conexiunea există deja, atunci nu va avea loc nicio conexiune, dar veți avea deja obiectul de conectare.
O pagină pe care există un formular de căutare live - somepage.php
Cererea Ajax handler - handler.php