Rezumat: în acest tutorial, veți învăța cum să efectuați căutări booleene în text complet în MySQL. În plus, veți învăța cum să utilizați operatorii booleeni pentru a forma interogări de căutare foarte complexe.
Introducere la căutările booleene full-text MySQL
În afară de căutarea full-text în limbaj natural, MySQL acceptă o formă suplimentară de căutare full-text care se numește căutare booleană full-text. În modul boolean, MySQL caută cuvinte în loc de concept ca în căutarea în limbaj natural.
MySQL vă permite să efectuați o căutare full-text bazată pe interogări foarte complexe în modul boolean împreună cu operatorii booleeni. Acesta este motivul pentru care căutarea full-text în modul boolean este potrivită pentru utilizatorii experimentați.
Pentru a efectua o căutare full-text în modul boolean, se utilizează modificatorul IN BOOLEAN MODE
în expresia AGAINST
. Exemplul următor vă arată cum să căutați un produs al cărui nume de produs conține cuvântul Truck
.
Code language: SQL (Structured Query Language) (sql)
Sunt returnate două produse ale căror nume de produs conțin cuvântul Truck
.
Pentru a găsi produsul ale cărui nume de produs conțin cuvântul Truck
, dar nu și rândurile care conțin Pickup
, se poate utiliza operatorul boolean de excludere ( -
), care returnează rezultatul care exclude cuvântul cheie Pickup
, ca în interogarea următoare:
Code language: SQL (Structured Query Language) (sql)
MySQL Boolean full-text search operators
Tabelul următor ilustrează operatorii booleeni de căutare full-text și semnificațiile acestora:
Operator | Descriere | |
---|---|---|
+ | Include, cuvântul trebuie să fie prezent. | |
– | Exclude, cuvântul nu trebuie să fie prezent. | |
> | Include, și crește valoarea de clasificare. | |
< | Include, și scade valoarea de clasificare. | |
() | Grupează cuvintele în subexpresii (permițându-le să fie incluse, excluse, clasificate și așa mai departe ca grup). | |
~ | Înlătură valoarea de clasificare a unui cuvânt. | |
* | Codul wildcard la sfârșitul cuvântului. | |
„” | Define o frază (spre deosebire de o listă de cuvinte individuale, întreaga frază este comparată pentru includere sau excludere). |
Exemplele următoare ilustrează modul de utilizare a operatorilor booleeni full-text în interogarea de căutare:
Pentru a căuta rânduri care conțin cel puțin unul dintre cele două cuvinte: mysql sau tutorial
‘mysql tutorial’
Pentru a căuta rânduri care conțin ambele cuvinte: mysql și tutorial
‘+mysql +tutorial’
Pentru a căuta rândurile care conțin cuvântul „mysql”, dar a pune rang mai mare pentru rândurile care conțin „tutorial”:
‘+mysql tutorial’
Pentru a căuta rândurile care conțin cuvântul „mysql”, dar nu și „tutorial”
‘+mysql -tutorial’
Pentru a căuta rândurile care conțin cuvântul „mysql” și a acorda un rang mai mic rândului dacă acesta conține cuvântul „tutorial”.
‘+mysql ~tutorial’
Pentru a căuta rândurile care conțin cuvintele „mysql” și „tutorial”, sau „mysql” și „training” în orice ordine, dar pune rândurile care conțin „mysql tutorial” mai sus decât „mysql training”.
‘+mysql +(>tutorial <training)’
Pentru a găsi rândurile care conțin cuvinte care încep cu „my”, cum ar fi „mysql”, „mydatabase”, etc., folosiți următoarele:
‘my*’
Caracteristici principale ale căutării booleene a textului complet MySQL
- MySQL nu sortează automat rândurile după relevanță în ordine descrescătoare în căutarea booleană a textului complet.
- Pentru a efectua interogări booleene, tabelele InnoDB necesită ca toate coloanele expresiei
MATCH
să aibă un indexFULLTEXT
. Observați că tabelele MyISAM nu necesită acest lucru, deși căutarea este destul de lentă. - MySQL nu acceptă mai mulți operatori booleeni într-o interogare de căutare în tabelele InnoDB, de exemplu, ‘++mysql’. MySQL va returna o eroare dacă faceți acest lucru. Cu toate acestea, MyISAM se comportă diferit. Acesta ignoră ceilalți operatori și utilizează operatorul care este cel mai apropiat de cuvântul de căutare, de exemplu, ‘+-mysql’ va deveni ‘-mysql’.
- Cercetarea full-text din InnoDB nu acceptă semnul plus (+) sau minus (-) la sfârșit. Suportă doar semnul plus sau minus din față. MySQL va raporta o eroare dacă cuvântul de căutare este ‘mysql+’ sau ‘mysql-‘. În plus, următoarele semne plus sau minus de la început cu wildcard nu sunt valide: +*, +-
- Semnalul de 50% înseamnă că dacă un cuvânt apare în mai mult de 50% din rânduri, MySQL îl va ignora în rezultatul căutării.
În acest tutorial, ați învățat cum să efectuați căutări booleene MySQL full-text cu mulți operatori booleeni utili.
- A fost util acest tutorial?
- DaNu