Motorul de căutare sphinx: caracteristici de bază, aplicații

În zilele noastre, aproape nimeni nu mai vrea să navigheze într-un magazin online în care trebuie să sorteze prin categorii sau să parcurgă liste lungi de produse.

Există multe instrumente disponibile care pot face ca căutările interne pe site să fie rapide, intuitive și adaptabile la orice nevoie a clientului.

motorul de căutare Shpinx

Motorul de căutare Sphinx pare să promită exact acest lucru. Un motor de căutare full text este atât flexibil și rapid.

Sphinx funcționează ca un server independent și nu stochează text pentru sine. Creează un index pe baza unei interogări SQL care extrage documente din baza de date, stochează indexurile și, într-o etapă ulterioară, returnează rândurile care corespund interogării.

regăsirea informațiilor

Ce este Sphinx

Motorul de căutare Sphinx este un motor de căutare full text motor de căutare, care este gratuit, rapid și scalabil. Este proiectat pentru performanță și relevanță. Inegalat de orice bază de date tradițională.

Un număr mare de site-uri cunoscute cu trafic ridicat se bazează pe el pentru căutare avansată și scalabilitate

Principalele caracteristici ale Sphinx

Sphinx ajută la activarea și creșterea valorii căutării și a scalabilității cu următoarele caracteristici care îl fac popular printre mii de dezvoltatori și vânzători de comerț electronic.

  1. Viteză mare de căutare (până la 150-250 Mbit/s pe nucleu cu 1.000.000 de documente).
  2. Sprijină căutarea distribuită în timp real.
  3. Viteză mare de indexare (până la 10-15Mbps pe nucleu).
  4. Scalabilitate ridicată (cea mai mare de clustere cunoscute, capabile să indexeze până la 3.000.000 de documente și să gestioneze peste 50 de milioane de interogări pe zi).
  5. Suport simultan pentru mai multe câmpuri (până la 32 în mod implicit) pentru căutarea integrală a documentelor.
  6. Capacitatea de a suporta o serie de atribute suplimentare pentru fiecare document (de exemplu, grupuri, marcaje temporale etc.). д.).
  7. Utilizarea cuvintelor de oprire.
  8. Suport pentru diferite API limbaje de programare (de exemplu, pentru PHP, Python, Java, Perl, Ruby, .NET și C ++ și t. д.).
  9. Abilitatea de a gestiona atât codificări de un singur octet, cât și UTF-8.
  10. Căutare morfologică.
  11. Integrare cu cele mai populare sisteme de gestionare a bazelor de date (de exemplu, MySQL, PostgreSQL)

În total, motorul de căutare Sphinx are peste 50 de funcții diferite (și acest număr este în continuă creștere).

regăsirea informațiilor

Cum funcționează Sphinx

Întreaga complexitate a schemei motorului de căutare se rezumă la 2 puncte cheie:

  • Sphinx își creează propria bază de date de indexare folosind tabelul sursă;
  • apoi, atunci când utilizatorul trimite o cerere API, Sphinx returnează o matrice de identificatori care se potrivesc cu cei din tabelul sursă.

De ce să folosiți Sphinx

Principalul motiv pentru a-l utiliza este viteza de căutare. Căutările obișnuite ale utilizatorilor în MySQL durează considerabil mai mult decât căutările Sphinx. Utilizatorul începe să observe o diferență odată ce baza sa de date are milioane de intrări. În cazul în care baza de date este mică (de exemplu, un forum cu 100 de utilizatori), aceasta nu este o opțiune. Deși ați putea încerca. În plus, există caracteristici interesante, cum ar fi morfologia cuvintelor (dacă utilizatorul caută pisici, se va potrivi cu pisică, dacă caută alergare, se va potrivi cu alergare, jogging etc.). д.).

Un alt motiv este căutarea în text complet. S-a gândit cineva vreodată că, atunci când caută două cuvinte pe Google, le va căuta în același paragraf sau în două paragrafe (sau într-o propoziție), dar nu în întreaga pagină?? Sphinx poate face lucruri similare.

motor de căutare

Scalabilitatea este după cum urmează. Dacă utilizatorul are baze de date mari pe mai multe servere, Sphinx se va ocupa de acest lucru. Iar aplicația va presupune că rulează pe același server. Sphinx poate lua o mare parte din sarcina serverelor PHP în ceea ce privește procesarea și căutarea de informații.

Sphinx este un pic diferit de ceea ce utilizatorul este obișnuit cu interogările MySQL. Așa că nu vă așteptați să obțineți totul instantaneu.

Ce este indexarea

Sphinx extrage date dintr-un tabel dintr-o bază de date MySQL și execută un proces numit indexare. Indexarea creează un fișier pe care îl puteți găsi cu ușurință cu Sphinx. De exemplu, dacă utilizatorul încearcă să caute un document în Microsoft Word, el va căuta cuvinte unul câte unul în textul documentului. În cazul documentelor foarte mari, căutarea poate fi foarte lentă. Pe de altă parte, Sphinx face indexarea înainte de a efectua orice căutare. Astfel se creează un index care poate fi căutat eficient în loc să se caute în întregul document cuvânt cu cuvânt. Indexul Encyclopaedia este un bun exemplu. Dacă un utilizator ar dori să găsească informații despre pisici, ar putea să facă ceea ce a făcut Microsoft Word și să citească fiecare pagină a unei enciclopedii căutând cuvântul "pisică". Sau ar putea să se uite la indexul alfabetic de la sfârșitul cărții, care spune despre pisici la paginile 104, 195 și 653. Este mult mai simplu în acest fel.

Motor de căutare Shpinx

Numai ceea ce este indexat poate fi căutat

Ceea ce trebuie reținut este că Sphinx poate căuta doar în indexul. Acest lucru înseamnă că de fiecare dată când utilizatorul dorește să găsească cele mai recente rezultate trebuie să actualizeze indexul.

Accesul la date

Dacă utilizatorul a lucrat deja cu PHP și MySQL, îi va fi mult mai ușor. În caz contrar, ar trebui probabil să învețe PHP și MySQL.

Motorul de căutare Sphinx returnează în mod normal identificatori MySQL, nu date.

Principalul lucru de reținut despre Sphinx este că nu recuperează date. În primul rând, se preia identificatorii de documente. Sphinx se ocupă de partea intensivă care caută înregistrări specifice. Utilizatorul poate executa apoi o parte simplă prin MySQL, care recuperează acest document. Astfel, de exemplu, dacă Sphinx recuperează ID-urile documentelor 1, 5 și 7 dintr-un index, va trebui să interogheze MySQL pentru a obține înregistrările (probabil cu ID-urile 1, 5 și 7). S-ar putea să vi se pară primitiv, dar MySQL necesită foarte puține resurse pentru a căuta un id de document, în comparație cu căutarea unui cuvânt.

Exemplu. Să presupunem că Sphinx extrage documente cu ID-urile 1, 5, 7 (SELECT * FROM documents WHERE id IN (1,5,7)).

Utilizatorul îi spune lui MySQL, ceea ce este necesar selectează toate coloanele din tabelul documente (sau din orice alt tabel care are un rezultat) în care id (sau cum se numește câmpul său) este 1, 5 sau 7. Și apoi puteți folosi mysql_fetch_array în PHP pentru a vă uita la date și a face ce doriți cu ele.

După ce ați stăpânit Sphinx pentru a ordona rezultatele, puteți salva ordinea după cum urmează

  1. Stocarea ordinii rezultatelor într-o matrice (stocați doar proprietatea id pentru corespondențe).
  2. Executarea IMPLODE pentru un array folosind $result = implode(",", $array) unde $array este o matrice de rezultate ale utilizatorului. Rezultatul va stoca un șir de ID-uri de rezultat separate prin virgulă. - SELECT * FROM documente WHERE id IN ($result) ORDER BY FIELD(id,$result).

Aici utilizatorul îi spune lui MySQL să aranjeze rezultatele după câmpul id în ordinea dată de $result.

Acest lucru poate părea complicat, dar se obișnuiește repede și în curând utilizatorul va scrie funcții pentru a se descurca singur.

motor de căutare

Rezultatul final este

Utilizarea Sphinx în loc de MySQL poate oferi beneficii semnificative de viteză. Sphinx este ideal pentru căutarea în tabelele statice. Dar, în același timp, pentru rândurile actualizate frecvent nu există posibilitatea de a utiliza fișiere de indexare simple. În schimb, trebuie fie să implementați fișiere delta, fie să treceți la indexarea în timp real. Ambele soluții implică costuri suplimentare de performanță. În concluzie, este necesară o planificare pentru a lucra mai eficient în Sphinx, deoarece utilizatorul trebuie să aibă toate sursele și fișierele index necesare instalate în prealabil.

Înlocuirea Sphinx pentru MySQL nu este trivială, dar nu este atât de greu să renunți. Dacă este nevoie de o viteză mare de căutare, luați în considerare trecerea de la MySQL la Sphinx, chiar dacă utilizatorul nu are nevoie de o căutare de text complet.

Articole pe această temă