Eseguire query Full text

MySQL
di Risorse.net

Le query Full Text consentono di eseguire ricerche ad alta precisione all'interno di un database. E' possibile sfruttarle solo dalla versione 3.23.23 di MySQL e solo con tabelle di tipo MyISAM e campi CHAR, VARCHAR, o TEXT.
Per eseguire una query Full text su MySQL, è necessario creare un indice che riunisca i vari campi che vanno sfruttati nella query.
Per fare ciò, è sufficiente aggiungere un INDEX di tipo FULLTEXT a tali campi. Su una tabella già esistente, possiamo fare:

ALTER TABLE nomeTabella ADD FULLTEXT (primoCampo,secondoCampo,terzoCampo,...);

Se invece dovessimo creare una nuova tabella, allora nel momento in cui andiamo a specificare i vari campi, possiamo aggiungere il FULLTEXT, ad esempio:

CREATE TABLE nomeTabella (
      id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
      titolo VARCHAR(200),
      testo TEXT,
      FULLTEXT (titolo,testo)
);

Una volta aggiunto l'indice FULLTEXT, possiamo iniziare a eseguire le nostre query. Ammettiamo di voler cercare la parola MySQL all'interno dei campi "titolo" e "testo" (della tabella "notizie") e ordinare i risultati secondo l'attinenza della parola ricercata nei due campi. Ecco come fare:

SELECT titolo,descrizione, MATCH(titolo,testo) AGAINST('mysql') AS attinenza FROM notizie WHERE MATCH(titolo,testo) AGAINST('mysql') ORDER BY attinenza DESC

Così otterremo i due campi titolo e descrizione che all'interno di titolo e testo avranno la parola mysql, ordinati secondo l'attinenza data da MySQL. Ecco come potrebbe essere il risultato della query precedente:

titolo descrizione attinenza
Rilasciato MySQL 4.0.16 Il database Open Source più utilizzato si aggiorna 7.212370387556
Disponibile MySQL 4.0.15 Nuova versione di bug fix di uno dei DBMS più usati al mondo 7.0089304929524
MySQL disponibile su IBM eServer zSeries Il database open Source è ora configurabile anche su IBM eServer zSeries con Linux installato 6.1195414142892
MySQL ora è più potente Una nuova e importante caratteristica di MySQL è il pieno supporto delle transazioni per applicativi di e-commerce 5.233245521266
Rilasciato MySQL 4.0.11 Disponibile per il download la nuova versione del popolare database 4.86869959964
Vulnerabilità nel database MySQL Grave problema di sicurezza all'interno del più utilizzato database open source 3.8611711513829
Rilasciato phpMyAdmin 2.5.4 Il programma che interagisce con il database MySQL si aggiorna 3.6027420458677
Rilasciato JMyAdmin 0.7 Il team di sviluppo di JMyAdmin, il sistema web based di gestione di MySql open source italiano, ha rilasciato la nuova versione 3.4924819304996
Nuova falla di sicurezza in Phpbb Uno dei più apprezzati forum Open Source soffre di una delicata vulnerabilità 2.4627044551326
Rilasciato YaBB SE 1.5.2: si consiglia l'aggiornamento immediato Uno dei più apprezzati Forum per siti Web, si aggiorna e ripara a diverse falle di sicurezza 2.254412718088


Questo sistema di query Full text può esserci molto utile se volessimo ordinare i risultati di una ricerca in base alla rilevanza di una parola, proprio come fanno i motori di ricerca più blasonati, che ordinano le varie pagine trovate in base a degli algoritmi propri.

Più nello specifico: query Full Text meglio definite
MySQL 4.0.1 e successivi è in grado di scendere ancora più nello specifico ed effettuare delle ricerche con gli operatori logici che utilizzano i motori di ricerca. Torniamo alla sintassi SQL di prima e ammettiamo di voler cercare solo quei records che contengono la parola MySQL ma non PhpMyAdmin. Ecco come si può fare:

SELECT titolo,descrizione, MATCH(titolo,testo) AGAINST('+mysql -phpmyadmin' IN BOOLEAN MODE) AS attinenza FROM notizie WHERE MATCH(titolo,testo) AGAINST('+mysql -phpmyadmin' IN BOOLEAN MODE) ORDER BY attinenza DESC

Vediamo ora tutti i casi e gli operatori utili nelle ricerche FullText:

© Risorse.net (www.risorse.net)
pagina in versione stampabile:
http://www.risorse.net /mysql/query_full_text.asp?print=ok