Si të përdorni kërkimet me tekst të plotë në MySQL
Kërkimi me tekst të plotë është një teknikë e bazës së të dhënave e cila do të rikthejë të dhënat edhe nëse ato nuk përputhen saktësisht me kriteret tuaja të kërkimit. Kjo mundëson kërkim të pasur të gjuhës natyrore që ndihet më i njohur.
Kërkimi për motorin e bazës së të dhënave duke përdorur një kërkim me tekst të plotë do të japë rezultate që përmbajnë frazat bazë të të dhënave, motor ose motor i bazës së të dhënave. Kjo zgjidh paqartësitë e mundshme në kriteret e kërkimit tuaj, kështu që rreshtat si Unë kam një bazë të dhënash dhe një motor ende shfaqen.
Kërkimet e thjeshta në MySQL mund të bëhen duke përdorur operatorin LIKE
. Kjo është joefikase dhe e kufizuar në funksionalitet. MySQL zakonisht duhet të kryejë një skanim të tabelës së plotë për të identifikuar të dhënat që përputhen me pyetjen tuaj.
Pyetjet me tekst të plotë përdorin një indeks të krijuar posaçërisht për të përmirësuar performancën. Kjo gjithashtu mundëson MySQL të mbajë gjurmët e fjalëve brenda grupit të të dhënave tuaja, duke lehtësuar kërkimin e gjuhës natyrore.
Vendosja e kërkimit me tekst të plotë
Ju mund të përdorni kërkimin me tekst të plotë vetëm me kolona që kanë një indeks të tekstit të plotë. Përdorni klauzolën FULLTEXT
në deklaratat KRIJO TABELA
për ta konfiguruar këtë kur vendosni skemën tuaj të bazës së të dhënave. Mund ta përdorni gjithashtu me TABELA ALTER
për të shtuar një indeks kërkimi në kolonat ekzistuese.
CREATE TABLE articles(content TEXT, FULLTEXT (content));
ALTER TABLE articles ADD FULLTEXT (content);
Me indeksin në vend, ju jeni gati të filloni të kërkoni në bazën e të dhënave tuaja.
Përdorimi i kërkimeve në tekst të plotë
Kërkimet në tekst të plotë fillojnë me një klauzolë WHERE
. Ju përdorni MATCH KUNDËR
në vend të Pëlqeje
. Ju duhet të tregoni kolonat e indeksuara që të përputhen, si dhe pyetjen për të kërkuar.
SELECT * FROM articles WHERE MATCH (content) AGAINST ('database engine' IN NATURAL LANGUAGE MODE);
Kjo do të kryejë një kërkim me tekst të plotë të artikujve duke përdorur pyetësorin motori i bazës së të dhënave
. Duke specifikuar NE NATURAL LANGUAGE MODE
, MySQL udhëzohet të interpretojë pyetjen fjalë për fjalë, pa e përpunuar atë në asnjë mënyrë. Ky është mënyra e paracaktuar e kërkimit nëse nuk specifikohet asnjë.
Renditja sipas rëndësisë së rezultatit
Një nga avantazhet e kërkimit me tekst të plotë është se ju lejon të porosisni regjistrimet e kthyera sipas rëndësisë. Kjo nuk është e mundur me një pyetje të rregullt LIKE
. Ju mund të përdorni një klauzolë MATCH ... KUNDËR
si pjesë e një SQL SELECT
. Kolona virtuale e kthyer do të përmbajë një rezultat të rëndësisë, nga 0 në 1, duke treguar se sa përputhet rekordi me pyetjen e kërkimit.
SELECT content, MATCH (content) AGAINST ('database engine') AS relevance FROM articles ORDER BY relevance DESC
Ky pyetje do të kthente së pari rezultatet më të rëndësishme. Kjo e ndihmon aplikacionin tuaj të përmbushë pritshmëritë e përdoruesve se si duhet të funksionojnë sistemet e kërkimit të gjuhës natyrore.
MySQL llogarit rezultatet përkatëse të kërkimit duke vlerësuar disa faktorë të ndryshëm. Këto përfshijnë numrin e regjistrimeve që përputhen me pyetjen, si dhe numrin e herëve që pyetja ndodh brenda çdo rekord. Një rezultat me disa përputhje të sakta për pyetjen do të renditet më lart se ai që përmban vetëm një pjesë të pyetjes.
Kur përdorni MATCH ... KUNDËR
në një deklaratë SELECT
, nuk keni nevojë ta përsërisni atë në klauzolën WHERE
. Ju mund t'i filtroni manualisht rezultatet për të përfshirë vetëm regjistrime me një rezultat të rëndësisë jo zero.
SELECT content, MATCH (content) AGAINST ('database engine') AS relevance FROM articles WHERE relevance > 0 ORDER BY relevance DESC
Modaliteti i zgjerimit të pyetjes
Gjuha natyrore nuk është mënyra e vetme e mbështetur e kërkimit me tekst të plotë. Modaliteti i zgjerimit të pyetjes është një alternativë që ndihmon në zgjerimin e gamës së rezultateve të kërkimit. Ai peshon automatikisht pyetjen e kërkimit kundrejt termave më të rëndësishëm.
Një kërkim i zgjeruar fillon duke gjetur të dhënat që përmbajnë një përputhje për pyetjen. Këto të dhëna më pas kontrollohen për të identifikuar fjalët më të rëndësishme. Baza e të dhënave më pas kryen një tjetër kërkim, këtë herë duke e bazuar në fjalët përkatëse në vend të pyetjes origjinale. Kjo zakonisht rezulton në kthimin e më shumë regjistrimeve duke ruajtur një shkallë të pranueshme të rëndësisë.
Ja se si aktivizoni modalitetin e zgjerimit të pyetjes:
SELECT * FROM articles WHERE MATCH (content) AGAINST ('database engine' WITH QUERY EXPANSION)
Modaliteti Boolean
Mënyra e fundit e kërkimit me tekst të plotë është modaliteti boolean. Kjo ju lejon të përfshini modifikues boolean në pyetjen tuaj. Ju mund ta përdorni këtë mënyrë kur keni nevojë për kontroll të avancuar mbi logjikën e përputhjes.
Ju mund të kërkoni që një fjalë të jetë e pranishme në çdo rezultat duke e prefiksuar atë me +
. Përdorni -
për të përjashtuar rezultatet që përmbajnë fjalën. Operatorë të tjerë mund të përdoren për të përputhur pjesë të fjalëve, për të krijuar nën-shprehje dhe për t'i bërë fjalët të zvogëlojnë rezultatin e rëndësisë. Kjo e fundit mund të jetë e dobishme kur maskon termat zhurmë. Nëse nuk specifikoni një operator, nënkuptohet se fjala do të referohet në pyetje me OR
.
SELECT * FROM articles WHERE MATCH (content) AGAINST ('+data* engine -sqlite' IN BOOLEAN MODE)
Kjo pyetje do të shfaqte artikujt me të paktën një fjalë duke filluar me data
ku sqlite
nuk përmendet. Çdo rezultat mund të përfshijë ose jo fjalën motor
.
Modaliteti Boolean ju lejon të ndërtoni kërkime të fuqishme duke përdorur logjikën tuaj. Një paralajmërim është se nuk mbështet vlerësimin e rëndësisë së kërkimit. Ky është kompensimi për t'u dhënë përdoruesve mundësinë për të bërë kërkime logjike. Renditja e rezultateve mund të mos përputhet me pritjet njerëzore.
Konfigurimi i kërkimit me tekst të plotë
MySQL vjen me disa opsione të konfigurimit të tekstit të plotë të cilat ju lejojnë të rregulloni mirë se si kryhen kërkimet. Këtu janë disa nga më të rëndësishmet.
innodb_ft_min_token_size
– Vendos gjatësinë minimale të fjalës për termat e indeksuar. Fjalët me më pak karaktere se kjo vlerë nuk do të shtohen në indeks, kështu që ju nuk do të jeni në gjendje t'i kërkoni ato. Vlera e paracaktuar është3
, e cila përjashton fjalët jashtëzakonisht të zakonshme sia
,an
dheI
. Ky cilësim zbatohet për tabelat InnoDB; përdornift_min_word_len
për MyISAM.innodb_ft_max_token_size
– Ngjashëm meinnodb_ft_min_token_size
, kjo cakton gjatësinë maksimale të fjalëve të indeksuara. Fjalët më të gjata nuk do të jenë të kërkueshme. Përdorft_max_word_len
për tabelat MyISAM.innodb_ft_enable_stopword
– Ky cilësim, i aktivizuar si parazgjedhje, ju lejon të kontrolloni nëse MySQL duhet të filtrojë stopwords. Fjalët ndaluese janë fjalë shumë të përdorura që mund të ndikojnë në mënyrë të padrejtë në rezultatet e kërkimit. Lista e parazgjedhur e fjalës ndaluese përmban 36 fraza të shpeshta.innodb_ft_user_stopword_table
– Ju mund ta vendosni këtë vlerë në emrin e një tabele bazë të dhënash nga e cila MySQL duhet të marrë listën e fjalëve. Kjo tabelë duhet të ketë një kolonë të vetmeVARCHAR
të quajturvlera
. Shto fjalët e tua për t'i përjashtuar si regjistrime në këtë tabelë.
Këto cilësime zakonisht vendosen në skedarin tuaj të konfigurimit të serverit MySQL. Vendndodhja ndryshon sipas platformës; shpesh mund të gjendet në /etc/mysql/my.cnf
. Do t'ju duhet të rinisni shërbimin MySQL pas ndryshimit të cilësimeve.
Pasi serveri të rikthehet, rindërtoni indekset e tekstit të plotë për tabelën tuaj. Duhet ta bëni këtë në mënyrë që të dhënat tuaja të riindeksohen duke përdorur konfigurimin aktual. Përndryshe, të dhënat e indeksuara më parë do të vazhdojnë të përdoren.
Për të riindeksuar një tabelë InnoDB, ekzekutoni OPTIMIZE TABLE my_table
. Për tabelat MyISAM, përdorni REPAIR TABLE my_table QUICK
. Më pas, indekset e kërkimit do të rindërtohen në mënyrë që ndryshimet e konfigurimit të hyjnë në fuqi.
Përmbledhje
Kërkimi me tekst të plotë MySQL aktivizohet duke shtuar një indeks FULLTEXT
në fushat tuaja të kërkueshme. Ju më pas përdorni MATCH ... KUNDËR
me një nga tre mënyrat e kërkimit për të marrë rezultatet tuaja. Pyetjet e gjuhës natyrore japin një rezultat të rëndësisë së kërkimit, të cilin mund ta përdorni për të renditur rezultatet tuaja.
Kërkimi me tekst të plotë ofron sjellje më të fuqishme kërkimi sesa një deklaratë LIKE
. Është gjithashtu shumë më efikase, veçanërisht në grupe të dhënash të mëdha, pasi i gjithë teksti indeksohet paraprakisht.